2

こんにちは、Spring Securityで処理される静的リソースが必要ですが、で処理されないという意味で静的なリソースを維持したいと思いますDispatcherServlet。保護されていないリソース用に1つのフォルダーが予約されており、保護されたリソース用に1つのフォルダーが予約されています。/res/securedリソースハンドラーから除外するまで、この作業を取得できません。しかし、私がこれを行うと、安全なリソースが処理されますが、DispatcherServletこれは正しくないと思います(おそらく私は間違っていますか?->説明またはリンクを投稿してください)。

私の構成:

/*--- Directories structure ---*/
res
|-- nonsecured
|-- secured
/*--- /Directories structure ---*/

/*--- WebApplicationInitializer ---*/
Dynamic portalSecurityFilter = servletContext.addFilter("portalSecurityFilter", new PortalSecurityFilter());
portalSecurityFilter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, "/*");

// Spring Security filtr
Dynamic securityFilter = servletContext.addFilter("springSecurityFilterChain", DelegatingFilterProxy.class);
securityFilter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, "/*");

CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");

Dynamic dynamicCharacterEncodingFilter = servletContext.addFilter("characterEncodingFilter", characterEncodingFilter);
dynamicCharacterEncodingFilter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, "/*");

Dynamic ajaxFilter = servletContext.addFilter("ajaxFilter", new AjaxFilter());
ajaxFilter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, "/*");

// Root context
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(WebConfig.class);

// Dispatcher servlet
ServletRegistration.Dynamic dispatcherServlet = servletContext.addServlet("dispatcherServlet", new DispatcherServlet(rootContext));
dispatcherServlet.setLoadOnStartup(1);
dispatcherServlet.addMapping("/");

servletContext.addListener(new ContextLoaderListener(rootContext));
/*--- /WebApplicationInitializer ---*/

/*--- Web configuration part ---*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    super.addResourceHandlers(registry);
    registry.addResourceHandler("/res/**").addResourceLocations("/WEB-INF/res/");
}
/*--- /Web configuration part ---*/

/*--- Spring Security confogiration part ---*/
<http pattern="/res/unsecured/**" security="none" />

<http pattern="/**" use-expressions="true" authentication-manager-ref="myAuthenticationManager">

    <intercept-url pattern="/res/secured/**" access="hasRole('ROLE_USER_AUTHENTICATED')" />
    <intercept-url pattern="/**" access="permitAll" />
</http>
/*--- /Spring Security confogiration part ---*/

回答ありがとうございます。

編集

私が遊んでいると<http pattern="/res/unsecured/**" security="none" />、リソースハンドラーによって提供されるリソースはSpring Securityフィルターチェーンを通過しないため、セキュリティ構成の一部は無意味であるように思われます。何かが足りないのですか、それとも構成が間違っていますか?

4

1 に答える 1

2

私はこれが私の恥だと管理しなければなりません。Spring Securityは期待どおりに機能し、上記の構成は適切に機能します。私の問題は、ブラウザが静的リソース(つまりPDFファイル)をキャッシュしていて、それに気づかなかったことです。同じ問題が発生した場合は、問題の検索に時間を費やす前に、ハードリフレッシュを行ってください:)

于 2013-01-14T14:26:02.487 に答える