gpt4 book ai didi

java - 在 Spring Security Java Config 中创建多个 HTTP 部分

转载 作者:IT老高 更新时间:2023-10-28 21:19:23 27 4
gpt4 key购买 nike

使用 Spring Security XML 配置,您可以定义多个 HTTP 元素来为应用程序的不同部分指定不同的访问规则。 8.6 Advanced Namespace Configuration 中给出的示例定义应用程序的独立有状态和无状态部分,前者使用 session 和表单登录,后者使用无 session 和 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 做同样的事情。禁用 session 并为我的 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 配置,以便我可以禁用 session 并指定不同的入口点。我知道我可以使用 requestMatcherrequestMatchers 来限制它适用的 URI,但您似乎不能使用它来创建单独的配置。这几乎就像我需要 两个 configure(HttpSecurity security) 方法。

最佳答案

在 Spring Security 中模仿多个 <http> 的行为Java 配置中的 XML 元素为安全配置创建多个类。一般而言,为HttpSecurity 的安全定义创建具有多个内部类 的通用安全配置是最好/最简单的。 .见 here为样本。

这里是 Spring Security 官方文档中的相关部分:
5.7 Multiple HttpSecurity

关于java - 在 Spring Security Java Config 中创建多个 HTTP 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18815015/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com