我有一个带有多个控制器的Web服务。我只需要为其中之一添加身份验证。其余应保留未经身份验证。请注意,我只需要在请求标头中添加用户名和密码。没有登录表单。我正在使用Spring Boot应用程序。
我尝试的代码:
@Configuration
public class ApplicationSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password("{noop}pass").roles("ADMIN");
}
// Secure the endpoints with HTTP Basic authentication
@Override
protected void configure(HttpSecurity http) throws Exception {
http
//HTTP Basic authentication
.httpBasic()
.and()
.authorizeRequests()
.antMatchers(HttpMethod.GET, "/myController").hasRole("ADMIN")
.and()
.csrf().disable()
.formLogin().disable();
}
但是,它不要求用户名和密码。如果我删除了{noop},但确实抛出了无效的密码编码器异常
答案 0 :(得分:0)
您要查找的短语是Method level Security in Spring
。用这个词在Google上搜索可能会带您找到所需的内容。如果不是这样,您将必须更加具体地满足您的要求。
答案 1 :(得分:0)
我最终使用以下代码解决了我的问题:
@配置 公共类ApplicationSecurityConfig扩展了WebSecurityConfigurerAdapter {
public static String ROLE_NAME = "ROLENAME";
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().passwordEncoder(new Pbkdf2PasswordEncoder("key", 10000, 128))
.withUser("userName").password("encryptedPassword").roles(ROLE_NAME);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.httpBasic()
.and()
.authorizeRequests()
.antMatchers(HttpMethod.GET, "/securedPath").hasRole(ROLE_NAME)
.and()
.csrf().disable()
.formLogin().disable();
}
}
您可以配置加密密码,并将所需的任何更改应用于此代码。主要目标是仅使用路径securePath来保护其余一个API,给定的用户名和密码可以使用或不使用加密。在我的示例中,我使用了加密密码,并将其添加到配置文件中。此类将自动解密并使用密码。无需用户界面,因为浏览器会自动弹出登录表单。