我正在尝试为我的Sping Boot 应用程序添加安全性。我当前的应用程序使用REST控制器,每次收到GET
或POST
请求时,我都会读取HTTP头来检索用户和密码,以便根据我存储的所有用户的属性文件来验证它们。我想将其更改为使用Spring Security,这是我目前得到的结果:
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/index.html").permitAll()
.antMatchers("/swagger-ui.html").hasRole("ADMIN")
.anyRequest().authenticated();
}
@Bean
public UserDetailsService userDetailsService() {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withUsername("admin").password("password").roles("ADMIN").build());
}
}
我如何告诉configure
方法将从头部而不是登录表单中检索用户凭据?
4条答案
按热度按时间izj3ouym1#
最少的代码添加是定义一个筛选器并将其添加到安全配置中,如smth
XHeaderAuthenticationFilter.java文件系统
安全配置.java
另一种方法是使用spring的
AOP
来定义在进入带注解的控制器方法之前要执行的某些逻辑的注解3bygqnnd2#
您应该避免使用默认的
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter
,因为它从您的请求参数中获取客户端提供的用户名和密码,而您实际上需要从头部获取它们。因此,您应该编写一个自定义的
AuthenticationFilter
扩展引用的UsernamePasswordAuthenticationFilter
,以更改其行为来满足您的要求:此筛选器示例扩展
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter
侦听每个请求,并从标头而不是parameters
获取username
和password
。然后,您应该按照以下方式更改配置,将滤波器设置在
UsernamePasswordAuthenticationFilter
位置:ergxz8rk3#
内存中的身份验证可以满足您的目的
wr98u20j4#
在Sping Boot 应用程序中,您可以将以下内容添加到application.properties
它将完成其余的工作,如从标题和验证中获取信息,请访问https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-security.html