gpt4 book ai didi

java - Spring security - 更改/登录默认路径

转载 作者:行者123 更新时间:2023-12-04 13:08:37 25 4
gpt4 key购买 nike

我们想为我们的 spring boot 应用程序添加 spring 以确保安全

问题是我们已经使用了/login路径

因此目前我们无法加载重定向到 /login 路径的 spring security 默认登录页面

我们想保留spring默认的登录表单,只是改变它使用的路径,

意思是,使用默认行为/实现,只需要更改默认(表单和流程)路径(无需创建 html)

我们没有找到任何相关的 property或代码(或答案)来覆盖它

我在 DefaultLoginPageGeneratingFilter 中看到默认

 public static final String DEFAULT_LOGIN_PAGE_URL = "/login";

编辑

尝试了@jannis 建议的setLoginPageUrl 方法

@Component
public class LoginFormFilter extends DefaultLoginPageGeneratingFilter {
@PostConstruct
private void init() {
setLoginPageUrl("/api/login");
}
@Override
public String getLoginPageUrl() {
return "/api/login";
}
}

但还是得到默认的登录页面

也无法使用 loginPage 方法覆盖

@Override
protected void configure(HttpSecurity http) throws Exception {
....formLogin().loginPage("/api/login");

最佳答案

覆盖默认登录 url 的主要问题在 FormLoginConfigurer 中,因为该类是 final 并且所有有用的配置方法都是 final私有(private)。相应地,我建议创建额外的配置器以在 DefaultLoginPageGeneratingFilter 类中设置属性。

public class AdditionalFormLoginConfigurer extends AbstractHttpConfigurer<AdditionalFormLoginConfigurer, HttpSecurity> {

private String loginPageUrl;
private String loginProcessingUrl;

@Override
public void init(HttpSecurity http) throws Exception {
DefaultLoginPageGeneratingFilter loginPageGeneratingFilter = http.getSharedObject(DefaultLoginPageGeneratingFilter.class);
if (loginPageGeneratingFilter == null) {
return;
}

loginPageGeneratingFilter.setFormLoginEnabled(true);
loginPageGeneratingFilter.setUsernameParameter("username");
loginPageGeneratingFilter.setPasswordParameter("password");
loginPageGeneratingFilter.setLoginPageUrl(loginPageUrl);
loginPageGeneratingFilter.setLogoutSuccessUrl(loginPageUrl + "?logout");
loginPageGeneratingFilter.setFailureUrl(loginPageUrl + "?error");
loginPageGeneratingFilter.setAuthenticationUrl(loginProcessingUrl);
}

public AdditionalFormLoginConfigurer loginPage(String loginPageUrl) {
this.loginPageUrl = loginPageUrl;
return this;
}

public AdditionalFormLoginConfigurer loginProcessingUrl(String loginProcessingUrl) {
this.loginProcessingUrl = loginProcessingUrl;
return this;
}
}

然后像这样在配置中注册上面的类:

private static final String LOGIN_PAGE_URL = "/custom_login_url";
private static final String LOGIN_PROCESSING_URL = "/perform_login";

@Override
protected void configure(HttpSecurity http) throws Exception {
...
.formLogin()
.loginPage(LOGIN_PAGE_URL)
.loginProcessingUrl(LOGIN_PROCESSING_URL)
.permitAll()
.and()
.apply(new AdditionalFormLoginConfigurer())
.loginPage(LOGIN_PAGE_URL)
.loginProcessingUrl(LOGIN_PROCESSING_URL)
...
}

关于java - Spring security - 更改/登录默认路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68082468/

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