Syn*_*tax 2 java spring spring-security
我在Vaadin应用程序中使用Spring和Spring-Security.
我想使用SecurityContextHolderAwareRequestWrapper.isUserInRole(...)检查用户是否具有某个角色,但无法弄清楚如何获取对包装器的引用(我尝试使用@Autowired注入此内容,注意:我没有手动配置实例因为我相信DelegatingFilterProxy已经在幕后这样做了).
这个堆栈溢出问题为我提供了解决方案,但我无法揭示如何正确访问或实例化包装器.
我的另一种选择是直接访问SecurityContext并按照链接的SO问题中的其他建议迭代GrantedAuthorities.
我应该如何访问/实例化包装器?
它应该开箱即用,至少在Spring Security 3.1中(HttpServletRequest安全链中的每一个都应该是实例SecurityContextHolderAwareRequestWrapper).
servlet-api-provision<http>element的属性添加到堆栈:
提供HttpServletRequest安全方法的版本,例如isUserInRole()和getPrincipal(),它们通过向堆栈添加SecurityContextHolderAwareRequestFilter bean来实现.默认为true.
该过滤器SecurityContextHolderAwareRequestFilter是简单,只包HttpServletRequest中SecurityContextHolderAwareRequestWrapper:
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
chain.doFilter(new SecurityContextHolderAwareRequestWrapper(
(HttpServletRequest) req, rolePrefix), res);
}
Run Code Online (Sandbox Code Playgroud)
(注意bug#SEC-1943 - 过滤器的名称分配给别名错误SERVLET_API_SUPPORT_FILTER.)