使用 Spring Security XML 配置,您可以定义多个 HTTP 元素来为应用程序的不同部分指定不同的访问规则。中给出的示例8.6 高级命名空间配置 http://docs.spring.io/spring-security/site/docs/3.2.x/reference/html/security-filter-chain.html#filter-chains-with-ns定义应用程序的单独有状态和无状态部分,前者使用会话和表单登录,后者不使用会话和 BASIC 身份验证:
<!-- Stateless RESTful service using Basic authentication -->
<http pattern="/restful/**" create-session="stateless">
<intercept-url pattern='/**' access='ROLE_REMOTE' />
<http-basic />
</http>
<!-- Empty filter chain for the login page -->
<http pattern="/login.htm*" security="none"/>
<!-- Additional filter chain for normal users, matching all other requests -->
<http>
<intercept-url pattern='/**' access='ROLE_USER' />
<form-login login-page='/login.htm' default-target-url="/home.htm"/>
<logout />
</http>
我不知道如何使用 Java Config 做同样的事情。禁用会话并为 Web 服务使用不同的入口点非常重要。现在我有以下内容:
@Override
public void configure(WebSecurity security)
{
security.ignoring().antMatchers("/resource/**", "/favicon.ico");
}
@Override
protected void configure(HttpSecurity security) throws Exception
{
security
.authorizeRequests()
.anyRequest().authenticated()
.and().formLogin()
.loginPage("/login").failureUrl("/login?loginFailed")
.defaultSuccessUrl("/ticket/list")
.usernameParameter("username")
.passwordParameter("password")
.permitAll()
.and().logout()
.logoutUrl("/logout").logoutSuccessUrl("/login?loggedOut")
.invalidateHttpSession(true).deleteCookies("JSESSIONID")
.permitAll()
.and().sessionManagement()
.sessionFixation().changeSessionId()
.maximumSessions(1).maxSessionsPreventsLogin(true)
.sessionRegistry(this.sessionRegistryImpl())
.and().and().csrf()
.requireCsrfProtectionMatcher((r) -> {
String m = r.getMethod();
return !r.getServletPath().startsWith("/services/") &&
("POST".equals(m) || "PUT".equals(m) ||
"DELETE".equals(m) || "PATCH".equals(m));
});
}
使用这个我可以禁用我的 Web 服务的 CSRF 保护。但我确实需要一个完全独立的 HTTP 配置,以便我可以禁用会话并指定不同的入口点。我知道我可以使用requestMatcher
or requestMatchers
限制它适用的 URI,但您似乎无法使用它来创建单独的配置。这几乎就像我需要的two configure(HttpSecurity security)
方法。
在 Spring Security 中模仿多个行为<http>
Java 配置中的 XML 元素创建多个用于安全配置的类。一般来说,创建通用安全配置是最好/最简单的多个内部类对于安全定义HttpSecurity
. See here https://github.com/spring-projects/spring-security-javaconfig/blob/905f30695ee61fd839e8519064ba1643258a2134/spring-security-javaconfig/src/test/groovy/org/springframework/security/config/annotation/web/SampleWebSecurityConfigurerAdapterTests.groovy#L274样品。
这里是官方 Spring Security 文档中的相关部分:
5.7 多重Http安全 https://docs.spring.io/spring-security/reference/servlet/configuration/java.html#_multiple_httpsecurity
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)