안녕하세요. 스프링 보안으로 처리되는 정적 리소스가 필요하며 계속 의미가 고정되어 있으려면 DispatcherServlet
으로 처리하고 싶습니다. 보안되지 않은 리소스 용으로 예약 된 폴더와 보안 리소스 용으로 하나의 폴더가 있습니다. 리소스 처리기에서 /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" />
부분은 무의미 나에게 보인다 주위를 연주한다. 이 없거나 구성이 잘못 되었습니까?
webpat.xml에서 DispatcherServlet 및 Spring 보안 필터 체인 (DelegatingFilterProxy)의 URL 패턴을 게시하십시오. –
안녕하세요 Maksym 저는 web.xml을 덜 구성 스타일로 사용하고 있습니다. 일반적으로 'DelegatingFilterProxy'는 "/ *"에 매핑되고 DispatcherServlet는 "/"에 매핑됩니다. –
addResourceLocations ("/ WEB-INF/res/**") –