Java 如何在Spring Security中更改登录URL

Java 如何在Spring Security中更改登录URL,java,spring,spring-boot,spring-security,configuration,Java,Spring,Spring Boot,Spring Security,Configuration,我创建了一个提供用户身份验证的API,它的登录操作由Spring Security在默认的'/login'路径上处理 我想将此路径更改为'api/v1/login' 这是我的安全配置: http.cors().and().csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .au

我创建了一个提供用户身份验证的API,它的登录操作由Spring Security在默认的'/login'路径上处理

我想将此路径更改为'api/v1/login'

这是我的安全配置:

http.cors().and().csrf().disable()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            .authorizeRequests()
            .antMatchers("/h2-console/**/**").permitAll()
            .antMatchers(HttpMethod.POST,"/user/register").permitAll()
            .antMatchers("/user/activate").permitAll()
            .antMatchers("/user/reset-password").permitAll()
            .antMatchers("/user/reset-password").permitAll()
            .antMatchers("/admin/user").hasRole("ADMIN")
            .antMatchers("/roles").permitAll()
            .antMatchers("/user/**").hasRole("USER")
            .and()
            .formLogin().loginProcessingUrl("/api/v1/login")
            .and()
            .exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint)
            .and()
            .addFilterBefore(new ExceptionHandlerFilter(), UsernamePasswordAuthenticationFilter.class)
            .addFilter(new JwtAuthenticationFilter(authenticationManager()))
            .addFilter(new JwtAuthorizationFilter(authenticationManager(), jwtUserDetailService));
我添加了这一行来更改它:

.formLogin().loginProcessingUrl("/api/v1/login")
但它仍在'/login'路径下工作

“/api/v1/login”返回404

有办法改变吗


Spring Boot版本:2.0.0。释放函数
.loginProcessingUrl(“/api/v1/login”)
,指定验证凭据的URL、验证用户名和密码的URL

它将只覆盖POST类型的
/api/v1/login
,而不是GET

它不会将请求传递给Spring MVC和您的控制器

有关其他自定义,您可以通过查看
FormLoginConfiguler

更新v1


您还可以检查
/api/**
下的URL是否都是安全的吗

如果是,请尝试从
/api/v1/login
中删除安全性,并将permitAll()配置添加到此url

查看此帖子-。如果它有助于您的场景

更新v2-这在这里的案例中有所帮助

您没有正确发送用户名和密码,为此,请参阅下面的内容,在您的邮件中,它显示了
BadCredentialsException
。我在应用程序上启用了调试,并且能够解决这个问题

您需要将参数发布到url中-如下所示(还附上了图像、邮递员截图):-

标题:
Content Type=application/x-www-form-urlencoded

键值对中的参数(不是json格式,请参考图片):

在上面,您可以看到index.html的响应,如下所示:-

<a href="http://localhost:8080/other.html">test static resource</a>
并且不再需要代码
.formLogin().loginProcessingUrl(“/api/v1/login”)

此外,您需要将成功和失败url添加到应用程序中,并使您的登录url获取基于json的用户凭据,您需要跟进并需要做更多的工作,一些有用的参考-

您自己就是。在最后一个类中,有一个名为

SetFilterProcessURL

其目的就是要做到这一点:

SetFilterProcessURL

公共void setFilterProcessURL(字符串FilterProcessURL)

设置确定是否需要身份验证的URL

参数:FilterProcessURL

是指向javadoc部分的链接

因此,在您的Web安全配置适配器中,您可以执行以下操作:

@Bean 
public JWTAuthenticationFilter getJWTAuthenticationFilter() { 
    final JWTAuthenticationFilter filter = new JWTAuthenticationFilter(authenticationManager()); 
    filter.setFilterProcessesUrl("/api/auth/login"); 
    return filter; 
}
然后,在同一类中的configure方法中,只需引用它,而不是创建新实例:

.addFilter(getJWTAuthenticationFilter

.loginProcessingUrl(“/api/v1/login”)将覆盖/login post url到/api/v1/login,您将在其中提交凭证。我正在通过邮递员发送post请求,但不会覆盖它,仍然在为“/login”工作。发布您正在尝试的完整url,您还可以共享的屏幕截图吗postman@kakabali您还可以检查
/api/**
下的URL是否都是安全的吗?如果是,请尝试从
/api/v1/login
中删除安全性,并将permitAll()配置添加到此url
@Bean 
public JWTAuthenticationFilter getJWTAuthenticationFilter() { 
    final JWTAuthenticationFilter filter = new JWTAuthenticationFilter(authenticationManager()); 
    filter.setFilterProcessesUrl("/api/auth/login"); 
    return filter; 
}
.addFilter(getJWTAuthenticationFilter