我正在尝试使用 @Secured("ADMIN") 设置方法安全注释(没有任何 XML,只有 java 配置,Spring Boot)。但是通过角色访问不起作用。
安全配置:
@Configuration
@EnableWebSecurity
public class AppSecurityConfiguration extends WebSecurityConfigurerAdapter{
.....
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/**").fullyAuthenticated().and()
.addFilterBefore(tokenAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
.....
}
我想限制对 Controller 方法的访问:
@RestController
@RequestMapping("/api/groups")
public class GroupController {
@Autowired
private GroupService groupService;
@Secured("ADMIN")
@RequestMapping
public List<Group> list() {
return groupService.findAll();
}
}
通过 url 限制访问有效,使用:
.antMatchers("/api/**").hasAuthority("ADMIN")
也许我忘了指定我要按角色进行限制?
统一更新:
按照规则,@PreAuthorize("hasRole('ADMIN')")
必须在Controller层还是Service层的哪一层?
最佳答案
欢迎添加
@EnableGlobalMethodSecurity(securedEnabled = true)
此元素用于在您的应用程序中启用基于注释的安全性(通过在元素上设置适当的属性),并将安全切入点声明组合在一起,这些声明将应用于您的整个应用程序上下文,专门用于 @安全
。
因此你的代码应该是这样的
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class AppSecurityConfiguration extends WebSecurityConfigurerAdapter{..
关于java - Spring Security,方法安全注释(@Secured)不起作用(java config),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31186826/