更改spring security中的登录服务URL [英] Changing the login service URL in spring security
问题描述
我已经使用 JWT 过滤器在我的 Spring Boot Web 应用程序中实现了 Spring 安全性.但是默认身份验证发生在 url http://localhost:8080/login
.如何将 /login
更改为我需要的一些 url,例如 /rest/auth/login
?
Hi I have implemented Spring security in my spring boot web application with JWT filters. But the default authentication is happening at url http://localhost:8080/login
. How to change /login
to some url I need like /rest/auth/login
?
我的WebSecurity
类是
@EnableWebSecurity
public class WebSecurity extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
public WebSecurity( UserDetailsService userDetailsService, BCryptPasswordEncoder bCryptPasswordEncoder )
{
this.userDetailsService = userDetailsService;
this.bCryptPasswordEncoder = bCryptPasswordEncoder;
}
@Override
protected void configure( HttpSecurity http ) throws Exception
{
http.cors().and().csrf().disable().authorizeRequests().antMatchers(HttpMethod.POST, "/rest/auth/**").permitAll()
.antMatchers("/static/*").permitAll().antMatchers("/").permitAll()
/* .anyRequest().authenticated() */.and()
.addFilter(new JWTAuthenticationFilter(authenticationManager()))
.addFilter(new JWTAuthorizationFilter(authenticationManager()));
}
@Override
public void configure( AuthenticationManagerBuilder auth ) throws Exception
{
auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder);
}
@Override
public void configure( org.springframework.security.config.annotation.web.builders.WebSecurity web )
throws Exception
{
web.ignoring().antMatchers("/static/**");
}
@Bean
CorsConfigurationSource corsConfigurationSource()
{
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
return source;
}
}
我的静态目录下的资源文件夹中有一个登录页面.Spring 安全的工作方式是,当用户从表单发送 userName
和 password
时,客户端必须将这些凭据发送到 /login
路径中的服务器,以便 spring 安全验证这些凭据并创建令牌.但我想将默认路径 /login
更改为 /rest/auth/login
I have a login page in my resource folder under static directory. The way Spring security works is, when user sends userName
and password
from the form, client has to send those credentials to /login
path in the server, so that spring security verifies those credentials and creates token. But I want to change that default path /login
to /rest/auth/login
推荐答案
您需要调整 WebSecurityConfig.java
和 JWTAuthenticationFilter
.
@Override
protected void configure( HttpSecurity http ) throws Exception
{
http.csrf().disable()
.authorizeRequests()
.antMatchers("/rest/noauth/**").permitAll()
.antMatchers("/rest/login").permitAll()
.antMatchers("/rest/logout").permitAll()
.antMatchers("/src/**").permitAll()
.antMatchers("/v2/api-docs/**", "/configuration/ui/**", "/swagger-resources/**",
"/configuration/security/**", "/swagger-ui.html/**", "/webjars/**")
.permitAll()
.anyRequest().authenticated()
.and()
.logout().addLogoutHandler(logoutHandler).logoutSuccessHandler(logoutSuccessHandler)
.logoutUrl("/rest/logout")
.and()
.addFilterBefore(
new JWTAuthenticationFilter("/rest/login",
UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(new JWTAuthorizationFilter(authenticationManager(), authTokenModelRepository),
UsernamePasswordAuthenticationFilter.class);
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
并使您的 JWTAuthenticationFilter
扩展 AbstractAuthenticationProcessingFilter
,它具有一个采用 filterProcessingURl
的构造函数,并且我通过了 /rest/login
作为参数.
and make your JWTAuthenticationFilter
extends AbstractAuthenticationProcessingFilter
which has a constructor which takes the filterProcessingURl
and I passed /rest/login
as the parameter.
public class JWTAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
private static final Logger LOGGER = LoggerFactory.getLogger(JWTAuthenticationFilter.class);
private AuthenticationManager authenticationManager;
private TokenService tokenService;
private UserModel credentials;
private RefreshTokenService refreshTokenService;
private AuthTokenModelRepository authTokenModelRepository;
private UserModelRepository userModelRepository;
public JWTAuthenticationFilter( String loginUrl, AuthenticationManager authenticationManager,
TokenService tokenService, RefreshTokenService refreshTokenService,
AuthTokenModelRepository authTokenModelRepository, UserModelRepository userModelRepository )
{
super(new AntPathRequestMatcher(loginUrl));
}
以上配置完成后,/rest/login
请求将执行JWTAuthenticationFilter
.
After the above configuration, the JWTAuthenticationFilter
will be executed for the request /rest/login
.
这篇关于更改spring security中的登录服务URL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!