在spring security中更改登录服务URL [英] Changing the login service URL in spring security
问题描述
您好我在使用JWT过滤器的Spring启动Web应用程序中实现了Spring安全性。但默认身份验证发生在url http:// localhost:8080 / login
。如何将 / login
更改为我需要的一些网址 / 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
和密码
时,客户端必须将这些凭据发送到 / 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
extends 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屋!