免责声明:我的问题有点类似于this question和this question,但我已经尝试了那些线程中建议的所有答案,并且已经花费了几天时间来解决这个问题.
我在现有的应用程序(JsP,Servlet)中介绍了Spring Security 3.2.6,我使用的是Java配置.我的应用程序将被浏览器和非浏览器客户端使用.我希望所有对URL的浏览器请求(即/ webpages / webVersion /和/ webpages / webVersion2 /)都启用CSRF,并且所有其他请求都禁用CSRF.非浏览器客户端从不访问上述两个URL,而浏览器应用程序也可以访问CSRF禁用的URL.
我尝试了各种选择:
>仅对上述URL启用Spring Security:
@OverrIDeprotected voID configure(httpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/","/resources/****").permitAll() .antMatchers("/webpages/webVersion/****","/webpages/webVersion2/****").authenticated() .antMatchers("/webpages/****").permitAll() .anyRequest().anonymous() .and() .formLogin().loginPage("/webpages/webVersion/login/newLogin.Jsp").failureUrl("/webpages/webVersion/login/newLogin.Jsp?error=true").loginProcessingUrl("/j_spring_security_check") .usernameParameter("username").passwordParameter("password").defaultSuccessUrl("/webpages/webVersion/login/loginSuccess.Jsp",true).permitAll() .and() .logout().logoutUrl("/webpages/webVersion/logout.Jsp").permitAll() .and().exceptionHandling().accessDenIEdPage("/webpages/webVersion/404-error-page.Jsp") .and() .csrf();}
这不起作用,因为我观察到所有URL都启用了CSRF.
>尝试使用CSRFProtectionMatcher:
.csrf().requireCsrfProtectionMatcher(csrfRequestMatcher);
CSRF仅针对预期的URL启用,但是甚至需要在匹配函数内检查/ resources / **和/ webpages / ** URL.考虑到它将适用于所有请求似乎有点多.
>尝试使用另一个版本的configure方法:
@OverrIDepublic voID configure(WebSecurity web) throws Exception { web.ignoring().regexMatchers(".*?/Jsp/(?!webVersion|webVersion2).*?");}
我不确定我是否正确地做到了但这并没有产生我想要的结果.
以上哪种方法是正确的(Spring Security)做我想要的方式?如何从Spring Security配置中实现所需的行为?最佳答案事实证明,他们的配置有些错误,最后我使用方法3实现了目标.我使用了以下版本的configure函数以及通常的configure(httpSecurity http)函数.
@OverrIDepublic voID configure(WebSecurity web) throws Exception { web.ignoring().regexMatchers(".*?/Jsp/(?!webVersion|webVersion2).*?");}
总结 以上是内存溢出为你收集整理的java – Spring Security的CSRF过滤器的选择性使用全部内容,希望文章能够帮你解决java – Spring Security的CSRF过滤器的选择性使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)