我试图使用@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); } ..... }
我想限制对控制器方法的访问:
@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")
也许我忘记指定要限制角色了?
UPD: 按照规则,在@PreAuthorize("hasRole('ADMIN')")控制器层或服务层必须在哪一层?
@PreAuthorize("hasRole('ADMIN')")
这个问题解决了。
我加 @EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class AppSecurityConfiguration extends WebSecurityConfigurerAdapter{ }
在控制器中,我更改@Secured("ADMIN")为@PreAuthorize("hasRole('ADMIN')")
@Secured("ADMIN")