如何使用 ReactiveUserDetailsService springboot 通过 Rest API 登录
Posted
技术标签:
【中文标题】如何使用 ReactiveUserDetailsService springboot 通过 Rest API 登录【英文标题】:How to login via Rest API using ReactiveUserDetailsService springboot 【发布时间】:2019-03-16 03:47:33 【问题描述】:我在 springboot 中使用响应式 spring 安全,我的前端是用 Angular 6 构建的,如果我使用 springboot 默认登录表单,一切都可以正常工作。
我想用rest api登录。
休息登录方式:
@PostMapping(path = "/login", consumes = MediaType.APPLICATION_JSON_VALUE)
public Mono<UserDetails> login(@RequestBody User user)
Mono<UserDetails> isLoggedIn = Mono.empty();
try
isLoggedIn = this.userDetailsService.findByUsername(user.getUsername());
catch (RuntimeException e)
return isLoggedIn;
return isLoggedIn;
我的 SecurityConfig 如下:
@Configuration
@EnableWebFluxSecurity
public class SecurityConfig
@Bean
SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http)
http.authorizeExchange().pathMatchers("/login","/signup","/api/users/login","/ui/**","/webjars/**").permitAll()
.anyExchange().authenticated()
.and()
.httpBasic().disable()
.formLogin().disable()
.csrf().disable()
.logout().disable();
return http.build();
我的 ReactiveUserDetailService 如下:
@Component
public class ServiceReactiveUserDetailsService implements ReactiveUserDetailsService
private UserRepo userRepo;
public ServiceReactiveUserDetailsService(UserRepo userRepo)
this.userRepo = userRepo;
@Bean
PasswordEncoder passwordEncoder()
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
@Override
public Mono<UserDetails> findByUsername(String username)
return this.userRepo.findByUsername(username).map(CustomUser::new);
private class CustomUser extends User implements UserDetails
public CustomUser(User user)
super(user);
@Override
public Collection<? extends GrantedAuthority> getAuthorities()
return AuthorityUtils.createAuthorityList("ROLE_USER");
@Override
public boolean isAccountNonExpired()
return true;
@Override
public boolean isAccountNonLocked()
return true;
@Override
public boolean isCredentialsNonExpired()
return true;
@Override
public boolean isEnabled()
return true;
我是春天世界的新手,任何帮助将不胜感激
【问题讨论】:
【参考方案1】:也许尝试使用 formLogin.loginPage 方法来指向您的登录方法,而不是禁用 formLogin。我认为问题出在您的安全配置中。
编辑: 这些教程可能会有所帮助: https://dzone.com/articles/reactive-spring-security-for-webflux-rest-web-serv https://www.baeldung.com/spring-security-5-reactive
【讨论】:
我做到了,但没有运气 嗯。本教程看起来可能会有所帮助:dzone.com/articles/…以上是关于如何使用 ReactiveUserDetailsService springboot 通过 Rest API 登录的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]