feat: 核心业务修复

This commit is contained in:
wangyu 2023-05-17 10:13:32 +08:00
parent 5c1e7d885f
commit 38811b4f93
2 changed files with 20 additions and 6 deletions

View File

@ -3,6 +3,8 @@ package com.flyfish.framework.configuration.jwt;
import com.flyfish.framework.service.MongoUserDetailsService; import com.flyfish.framework.service.MongoUserDetailsService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextImpl; import org.springframework.security.core.context.SecurityContextImpl;
import org.springframework.security.web.server.context.ServerSecurityContextRepository; import org.springframework.security.web.server.context.ServerSecurityContextRepository;
@ -32,7 +34,9 @@ public class JwtSecurityContextRepository implements ServerSecurityContextReposi
return userDetailsService.findByUsername(userId) return userDetailsService.findByUsername(userId)
.map(userDetails -> { .map(userDetails -> {
SecurityContextImpl securityContext = new SecurityContextImpl(); SecurityContextImpl securityContext = new SecurityContextImpl();
securityContext.setAuthentication(tokenProvider.getAuthentication(userDetails)); Authentication authentication = new UsernamePasswordAuthenticationToken(userDetails, userDetails.getPassword(),
userDetails.getAuthorities());
securityContext.setAuthentication(authentication);
return securityContext; return securityContext;
}); });
}); });

View File

@ -15,13 +15,16 @@ import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.security.Key; import java.security.Key;
import java.time.Duration; import java.time.Duration;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -142,12 +145,19 @@ public class TokenProvider implements InitializingBean {
/** /**
* token解析第一步获取认证此处通过claims就能知道token是哪个端的 * token解析第一步获取认证此处通过claims就能知道token是哪个端的
* *
* @param userDetails 用户详情 * @param token token
* @return 结果 * @return 结果
*/ */
public Authentication getAuthentication(UserDetails userDetails) { public Authentication getAuthentication(String token) {
return new UsernamePasswordAuthenticationToken(userDetails, userDetails.getPassword(), Claims claims = parseToken(token);
userDetails.getAuthorities()); Collection<? extends GrantedAuthority> authorities =
Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(","))
.filter(StringUtils::isNotBlank)
.map(SimpleGrantedAuthority::new)
.collect(Collectors.toList());
User principal = new User(claims.getSubject(), "", authorities);
return new UsernamePasswordAuthenticationToken(principal, token, authorities);
} }
/** /**