我是把security的权限配置放在common公共包下,然后每个模块都引用的。上面的配置是出现问题时的配置,当我访问test接口时报错403权限不足。
问题代码:
http
//关闭csrf
.csrf(AbstractHttpConfigurer::disable)
// 关闭默认注销接口
.logout().disable()
//不通过Session获取SecurityContext
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
// 对于登录接口 允许匿名访问
.antMatchers(
"/**/login",
"/**/register",
"/**/test",
"/**/doc.html",
"/**/webjars/**",
"/**/swagger-resources",
"/**/v2/api-docs"
)
.anonymous()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated();
问题出现在这里:
.antMatchers(....).anonymous()
这是允许匿名访问,必须不含请求头的token,因为会默认分配一个角色给匿名用户
antMatchers方法的回调有三种:
- authenticated() 必须要有权限验证通过才能调用的接口
- permitAll() 允许所有请求访问
- anonymous() 允许匿名用户访问,即使是已登录的用户也不能访问
问题就出在这里,上面用了anonymous()方法设置匿名访问了,所以只需要把需要随便访问的接口,改成permitAll()就可以了
http
//关闭csrf
.csrf(AbstractHttpConfigurer::disable)
// 关闭默认注销接口
.logout().disable()
//不通过Session获取SecurityContext
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
// 对于登录接口 允许匿名访问
.antMatchers(
"/**/login",
"/**/register"
)
.anonymous()
// 允许所有角色权限请求访问
.antMatchers(
"/**/test",
"/**/doc.html",
"/**/webjars/**",
"/**/swagger-resources",
"/**/v2/api-docs"
)
.permitAll()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated();