Java 如何在Spring Security中更改登录URL
我创建了一个提供用户身份验证的API,它的登录操作由Spring Security在默认的'/login'路径上处理 我想将此路径更改为'api/v1/login' 这是我的安全配置: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
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