【发布时间】:2016-01-18 18:24:04
【问题描述】:
在过滤器中,我在 spring 安全上下文中添加了以下角色。
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
GrantedAuthority authority = new SimpleGrantedAuthority(ANONYMOUS);
List<GrantedAuthority> grantedAuthority = new ArrayList<>();
grantedAuthority.add(authority);
Authentication authentication = new AnonymousAuthenticationToken(ANONYMOUS, ANONYMOUS, grantedAuthority);
SecurityContextHolder.getContext().setAuthentication(authentication);
arg2.doFilter(arg0,arg1);
}
然后从控制器中的一个rest api方法,我检查授权角色如下,
@RestController
@RequestMapping(value = "/api")
public class MyController {
@RequestMapping(value = "/myservice1", method = RequestMethod.GET)
@PreAuthorize("hasRole('ROLE_USER')")
public HttpEntity<String> myService() {
System.out.println("-----------myService invoke-----------");
return new ResponseEntity<String>(HttpStatus.OK);
}
}
但是当我调用上面的 API 时,它成功地打印了系统输出。但它应该给我一个 401 未经授权的错误吧?
【问题讨论】:
-
您是否启用了方法级别的安全性?
-
在 SecurityConfig 类中添加 @EnableGlobalMethodSecurity(prePostEnabled = true) 后,它可以工作。如果您可以将其添加到 asnwer 我将接受它。谢谢
标签: java spring spring-security spring-boot