我正在使用Spring安全性来保护REST服务中的某些端点。
这是安全配置类:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, jsr250Enabled = true, prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
// Other methods
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors()
.and()
.csrf()
.disable()
.exceptionHandling()
.authenticationEntryPoint(this.jwtAuthenticationEntryPoint)
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/",
"/favicon.ico",
"/**/*.png",
"/**/*.gif",
"/**/*.svg",
"/**/*.jpg",
"/**/*.html",
"/**/*.css",
"/**/*.js")
.permitAll()
.antMatchers(HttpMethod.POST, "/api/auth/**")
.permitAll()
.anyRequest()
.authenticated();
// Add our custom JWT security filter
http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
}
如您所见,我可以通过以下方式获得对 / api / auth / signup 和 / api / auth / signin 的完全访问权限: 1}}
由于某种原因,当我在邮递员中尝试这些请求时,“注册” 请求工作正常,但“登录” 无效,并给了我“ 401未经授权”
我也尝试过 .antMatchers(HttpMethod.POST, "/api/auth/**").permitAll()
这是我的控制器:
.antMatchers("/**").permitAll()
答案 0 :(得分:2)
我有同样的问题,不确定,但我认为您需要此命令:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/api/auth/**")
.permitAll()
.antMatchers("/",
"/favicon.ico",
"/**/*.png",
"/**/*.gif",
"/**/*.svg",
"/**/*.jpg",
"/**/*.html",
"/**/*.css",
"/**/*.js")
.permitAll()
.anyRequest()
.authenticated()
.and()
.cors()
.and()
.exceptionHandling()
.authenticationEntryPoint(this.jwtAuthenticationEntryPoint)
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.csrf()
.disable();
// Add our custom JWT security filter
http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
答案 1 :(得分:1)
您的配置由于评估 antMatcher 的顺序而无法正常工作
.and()
.authorizeRequests()
.antMatchers("/",
"/favicon.ico",
"/**/*.png",
"/**/*.gif",
"/**/*.svg",
"/**/*.jpg",
"/**/*.html",
"/**/*.css",
"/**/*.js")
.permitAll()
.antMatchers(HttpMethod.POST, "/api/auth/**")
.permitAll()
.anyRequest()
.authenticated();
请求匹配规则的顺序很重要,更具体的规则应排在第一位。这两个 antMatcher 规则之间存在一些冲突,因此第二个规则即 .antMatchers(HttpMethod.POST,“ / api / auth / ”)**被忽略。>
因此顺序应为:-
.antMatchers(HttpMethod.POST, "/api/auth/**")
.permitAll()
.antMatchers("/",
"/favicon.ico",
"/**/*.png",
"/**/*.gif",
"/**/*.svg",
"/**/*.jpg",
"/**/*.html",
"/**/*.css",
"/**/*.js")
.permitAll()
答案 2 :(得分:0)
我上次做这件事我记得订单很重要。
func getValues(m interface{}) []interface{} {
v := reflect.ValueOf(m)
result := make([]interface{}, 0, v.Len())
for _, k := range v.MapKeys() {
result = append(result, v.MapIndex(k).Interface())
}
return result
}
答案 3 :(得分:0)
您需要在配置方法中添加以下内容 / error是由于任何异常导致应用程序发生错误时的默认回退,并且默认情况下受保护。
protected void configure(HttpSecurity httpSecurity) throws Exception {
//disable CRSF
httpSecurity
//no authentication needed for these context paths
.authorizeRequests()
.antMatchers("/error").permitAll()
.antMatchers("/error/**").permitAll()
.antMatchers("/your Urls that dosen't need security/**").permitAll()
下面的代码段
@Override
public void configure(WebSecurity webSecurity) throws Exception
{
webSecurity
.ignoring()
// All of Spring Security will ignore the requests
.antMatchers("/error/**")
}
现在,当allowAll Urls发生异常时,您将不会获得401并获得500个异常的详细信息
答案 4 :(得分:0)
我遇到了同样的问题,这是因为我没有使用默认的 jdbc 架构,所以我传递了默认 UserDetailsService 和我的权限表所需的查询为空,因此无法通过用户名搜索结果。