Java 使用spring安全性处理静态资源

Java 使用spring安全性处理静态资源,java,spring,spring-security,static-resource,Java,Spring,Spring Security,Static Resource,您好,我需要使用Spring Security处理的静态资源,并且我希望它仍然保持静态,这意味着它没有使用DispatcherServlet处理。我有一个为非安全资源保留的文件夹和一个为安全资源保留的文件夹。在从资源处理程序中排除/res/secured之前,我无法获得此工作。但如果我这样做,安全资源将使用DispatcherServlet进行处理,我认为这是不对的(可能我错了?->发布解释或链接) 我的配置: /*--- Directories structure ---*/ res |--

您好,我需要使用Spring Security处理的静态资源,并且我希望它仍然保持静态,这意味着它没有使用
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 ---*/
/*---目录结构---*/
物件
|--不安全
|--安全的
/*---/目录结构---*/
/*---WebApplicationInitializer---*/
动态portalSecurityFilter=servletContext.addFilter(“portalSecurityFilter”,new portalSecurityFilter());
portalSecurityFilter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class),false,“/*”;
//弹簧安全过滤器
DynamicSecurityFilter=servletContext.addFilter(“springSecurityFilterChain”,DelegatingFilterProxy.class);
securityFilter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class),false,“/*”;
CharacterEncodingFilter CharacterEncodingFilter=新的CharacterEncodingFilter();
characterEncodingFilter.setEncoding(“UTF-8”);
动态dynamicCharacterEncodingFilter=servletContext.addFilter(“characterEncodingFilter”,characterEncodingFilter);
dynamicCharacterEncodingFilter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class),false,“/*”;
动态ajaxFilter=servletContext.addFilter(“ajaxFilter”,新的ajaxFilter());
ajaxFilter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class),false,“/*”;
//根上下文
AnnotationConfigWebApplicationContext rootContext=新的AnnotationConfigWebApplicationContext();
register(WebConfig.class);
//调度器servlet
ServletRegistration.Dynamic dispatcherServlet=servletContext.addServlet(“dispatcherServlet”,新dispatcherServlet(rootContext));
dispatcherServlet.setLoadOnStartup(1);
dispatcherServlet.addMapping(“/”);
addListener(新的ContextLoaderListener(rootContext));
/*---/WebApplicationInitializer---*/
/*---Web配置部件---*/
@凌驾
public void addResourceHandlers(ResourceHandlerRegistry注册表){
super.addResourceHandlers(注册表);
registry.addResourceHandler(“/res/**”).addResourceLocations(“/WEB-INF/res/”);
}
/*---/Web配置部件---*/
/*---弹簧安全共焦部分---*/
/*---/Spring安全配置部分---*/
谢谢你的回答

编辑

在我玩游戏的时候,我觉得
是安全的一部分 配置是没有意义的,因为资源由资源提供服务 处理程序不通过Spring安全过滤器链。我失踪了吗 我的配置有问题吗


我不得不承认这是我的耻辱。SpringSecurity按预期工作,上述配置工作正常。我的问题是浏览器缓存了静态资源(即PDF文件),我只是没有注意到。如果您遇到同样的问题,请尝试在花费时间搜索问题之前进行硬刷新:)

请发布DispatcherServlet和spring安全筛选器链(DelegatingFilterProxy)的URL模式从web.xml.Hi Maksym开始,我使用的是web.xml-less配置样式,所以我将把它放在那里,但一般来说,
DelegatingFilterProxy
映射到“/*”和
DispatcherServlet
映射到“/”。请尝试为您的模式添加**:addResourceLocations(/web-INF/res/**)不工作,无论如何资源处理程序工作没有问题……如果您想要处理这个过程的话“/res/unsecured/**”使用Spring Security,然后可以尝试删除。添加到第二个元素中。