2

VaadinアプリケーションでSpringとSpring-Securityを使用しています。

SecurityContextHolderAwareRequestWrapper.isUserInRole(...)を使用してユーザーが特定のロールを持っているかどうかを確認したいのですが、ラッパーへの参照を取得する方法がわかりません(@ Autowiredを使用してこれを挿入しようとしました、注:インスタンスを手動で構成しませんでしたDelegatingFilterProxyはすでにこれを舞台裏で行っていると私は信じているので)。

このスタックオーバーフローの問題は解決策を提供してくれましたが、ラッパーに適切にアクセスまたはインスタンス化する方法を見つけることができません。

私の他の選択肢は、SecurityContextに直接アクセスし、リンクされたSOの問題の他の提案に従って、GrantedAuthoritiesを反復処理することです。

ラッパーにアクセス/インスタンス化するにはどうすればよいですか?

4

1 に答える 1

5

少なくともSpringSecurity3.1では、箱から出してすぐに機能するはずです(HttpServletRequestセキュリティチェーン内のすべてがのインスタンスである必要がありますSecurityContextHolderAwareRequestWrapper)。

servlet-api-provision<http>要素の属性がスタックに追加されます:

スタックにSecurityContextHolderAwareRequestFilterBeanを追加することによって実装される、isUserInRole()やgetPrincipal()などのHttpServletRequestセキュリティメソッドのバージョンを提供します。デフォルトはtrueです。

フィルタSecurityContextHolderAwareRequestFilterは単純で、ラップHttpServletRequestするだけですSecurityContextHolderAwareRequestWrapper

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
        throws IOException, ServletException {
    chain.doFilter(new SecurityContextHolderAwareRequestWrapper(
            (HttpServletRequest) req, rolePrefix), res);
}

バグ#SEC-1943に注意してください-フィルターのエイリアスに間違った名前が割り当てられていSERVLET_API_SUPPORT_FILTERます。)

于 2012-07-04T10:47:09.047 に答える