1

すべてのコントローラーで Spring Security を構成しています。「システムが有効になっている」場合にのみ、いくつかのメソッドの実行を開始したい。この情報は、特定の静的メソッドを介してコントローラー全体からアクセスできます (非静的にすることができます)。私の要点は、すべてのメソッドの開始時に Java コードで明示的なチェックを行うことを避けたいということです。Spring Security 経由でそこに到達するにはどうすればよいですか?

4

2 に答える 2

1

1 つの方法は、ハンドラー インターセプターを使用することです。

一般的な考え方は次のとおりです。

(1)ブロックしたい URL パターンを設定します。

<util:list id="sysEnableCheckUrlPatterns" value-type="java.lang.String">
    <beans:value>/module1/**</beans:value>
    <beans:value>/module2/**</beans:value>
</util:list>

(2)インターセプターを書きます:

    public class SysEnableCheckInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {


            /* 
                If system enabled then return true. Otherwise return false (and optionally write something in response)

            */
    }
}

(3)そのインターセプターを構成します。3.1 では、次のように実行できます。

    @Configuration
public class AppConfig extends WebMvcConfigurerAdapter {

    @Resource(name="sysEnableCheckUrlPatterns")
    /* or use @Autowired or @Inject if you like */
    private String[] sysEnableCheckUrlPatterns;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

    registry.addInterceptor(new SysEnableCheckInterceptor()).addPathPatterns(sysEnableCheckUrlPatterns);

    }

}
于 2013-03-20T17:14:39.233 に答える
0

セキュリティアノテーションで SPEL (Spring Expression Language) を使用できます。

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/el-access.htmlを参照

于 2013-03-20T03:14:07.947 に答える