定義されているものを除くすべてのコントローラーとアクションにインターセプターを適用することは可能ですか?
明確にするために、定義済みのリストにインターセプターを適用することに興味はありません。除外するものを定義したい。
ありがとう!
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 のドキュメントです
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/*");
}
}
インターセプターを構成するときに、パスパターンを指定できます。インターセプターは、パスがインターセプターパスパターンと一致するコントローラーに対してのみ呼び出されます。
しかし、お気づきかもしれませんが、パスパターンは除外をサポートしていません。
したがって、インターセプター内のパスのブラックリストをコーディングすることが唯一の方法だと思います。インターセプターが呼び出されたら、HttpServletRequest.getRequestURI()
を取得し、パスがブラックリストに載っているかどうかを確認します。
インターセプターの@PostConstruct
アノテーション付きメソッド内にブラックリストを作成して、たとえばプロパティファイルからブラックリストに登録されたパスを取得できます。