web-dev-qa-db-ja.com

Spring MVC 3、いくつかの定義済みパスを除くすべてのインターセプター

定義されているものを除くすべてのコントローラーとアクションにインターセプターを適用することは可能ですか?

明確にするために、定義済みのリストにインターセプターを適用することに興味はありません。除外するものを定義したい。

ありがとう!

45
momomo

Spring 3.2以降、彼らはその機能をタグで追加しました

mvc:exclude-mapping

Springドキュメントのこの例を参照してください。

<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
<mvc:interceptor>
    <mvc:mapping path="/**"/>
    <mvc:exclude-mapping path="/admin/**"/>
    <bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" />
</mvc:interceptor>
<mvc:interceptor>
    <mvc:mapping path="/secure/*"/>
    <bean class="org.example.SecurityInterceptor" />
</mvc:interceptor>

これが link のドキュメントです

66
gamerkore

Javaベースの設定、 docs

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LocaleInterceptor());
        registry.addInterceptor(new ThemeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**");
        registry.addInterceptor(new SecurityInterceptor()).addPathPatterns("/secure/*");
    }

}
22
Abdullah Khan

インターセプターを構成するときに、パスパターンを指定できます。インターセプターは、パスがインターセプターパスパターンと一致するコントローラーに対してのみ呼び出されます。

参照: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-config-interceptor

しかし、お気づきかもしれませんが、パスパターンは除外をサポートしていません。

したがって、インターセプター内のパスのブラックリストをコーディングすることが唯一の方法だと思います。インターセプターが呼び出されたら、HttpServletRequest.getRequestURI()を取得し、パスがブラックリストに載っているかどうかを確認します。

インターセプターの@PostConstructアノテーション付きメソッド内にブラックリストを作成して、たとえばプロパティファイルからブラックリストに登録されたパスを取得できます。

3
tbruyelle