Commit bd76b5ad authored by hubin's avatar hubin

登陆请求直接放行

parent 2a13e840
...@@ -38,78 +38,78 @@ import java.nio.charset.StandardCharsets; ...@@ -38,78 +38,78 @@ import java.nio.charset.StandardCharsets;
@EnableWebFluxSecurity @EnableWebFluxSecurity
public class ResourceServerConfig { public class ResourceServerConfig {
private final AuthorizationManager authorizationManager; private final AuthorizationManager authorizationManager;
@Autowired @Autowired
public ResourceServerConfig(AuthorizationManager authorizationManager) { public ResourceServerConfig(AuthorizationManager authorizationManager) {
this.authorizationManager = authorizationManager; this.authorizationManager = authorizationManager;
} }
@Bean @Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) { public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
http.oauth2ResourceServer().jwt() http.oauth2ResourceServer().jwt()
.jwtAuthenticationConverter(jwtAuthenticationConverter()); .jwtAuthenticationConverter(jwtAuthenticationConverter());
http.authorizeExchange() http.authorizeExchange()
.pathMatchers("**/oauth/token").permitAll() .pathMatchers("/oauth/token").permitAll()
.anyExchange().access(authorizationManager) .anyExchange().access(authorizationManager)
.and() .and()
.exceptionHandling() .exceptionHandling()
// 处理未授权 // 处理未授权
.accessDeniedHandler(accessDeniedHandler()) .accessDeniedHandler(accessDeniedHandler())
//处理未认证 //处理未认证
.authenticationEntryPoint(authenticationEntryPoint()) .authenticationEntryPoint(authenticationEntryPoint())
.and().csrf().disable(); .and().csrf().disable();
return http.build(); return http.build();
} }
/** /**
* 未授权 * 未授权
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Bean @Bean
ServerAccessDeniedHandler accessDeniedHandler() { ServerAccessDeniedHandler accessDeniedHandler() {
return (exchange, denied) -> Mono.defer(() -> Mono.just(exchange.getResponse())) return (exchange, denied) -> Mono.defer(() -> Mono.just(exchange.getResponse()))
.flatMap(response -> ResourceServerConfig.writeFailedToResponse(response, ResultCode.ACCESS_UNAUTHORIZED)); .flatMap(response -> ResourceServerConfig.writeFailedToResponse(response, ResultCode.ACCESS_UNAUTHORIZED));
} }
/** /**
* token无效或者已过期自定义响应 * token无效或者已过期自定义响应
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Bean @Bean
ServerAuthenticationEntryPoint authenticationEntryPoint() { ServerAuthenticationEntryPoint authenticationEntryPoint() {
return (exchange, e) -> Mono.defer(() -> Mono.just(exchange.getResponse())) return (exchange, e) -> Mono.defer(() -> Mono.just(exchange.getResponse()))
.flatMap(response -> ResourceServerConfig.writeFailedToResponse(response, ResultCode.TOKEN_INVALID_OR_EXPIRED)); .flatMap(response -> ResourceServerConfig.writeFailedToResponse(response, ResultCode.TOKEN_INVALID_OR_EXPIRED));
} }
/** /**
* @link https://blog.csdn.net/qq_24230139/article/details/105091273 * @link https://blog.csdn.net/qq_24230139/article/details/105091273
* ServerHttpSecurity没有将jwt中authorities的负载部分当做Authentication * ServerHttpSecurity没有将jwt中authorities的负载部分当做Authentication
* 需要把jwt的Claim中的authorities加入 * 需要把jwt的Claim中的authorities加入
* 方案:重新定义权限管理器,默认转换器JwtGrantedAuthoritiesConverter * 方案:重新定义权限管理器,默认转换器JwtGrantedAuthoritiesConverter
*/ */
@Bean @Bean
public Converter<Jwt, ? extends Mono<? extends AbstractAuthenticationToken>> jwtAuthenticationConverter() { public Converter<Jwt, ? extends Mono<? extends AbstractAuthenticationToken>> jwtAuthenticationConverter() {
JwtGrantedAuthoritiesConverter jwtGrantedAuthoritiesConverter = new JwtGrantedAuthoritiesConverter(); JwtGrantedAuthoritiesConverter jwtGrantedAuthoritiesConverter = new JwtGrantedAuthoritiesConverter();
jwtGrantedAuthoritiesConverter.setAuthorityPrefix(AuthConstants.AUTHORITY_PREFIX); jwtGrantedAuthoritiesConverter.setAuthorityPrefix(AuthConstants.AUTHORITY_PREFIX);
jwtGrantedAuthoritiesConverter.setAuthoritiesClaimName(AuthConstants.JWT_AUTHORITIES_KEY); jwtGrantedAuthoritiesConverter.setAuthoritiesClaimName(AuthConstants.JWT_AUTHORITIES_KEY);
JwtAuthenticationConverter jwtAuthenticationConverter = new JwtAuthenticationConverter(); JwtAuthenticationConverter jwtAuthenticationConverter = new JwtAuthenticationConverter();
jwtAuthenticationConverter.setJwtGrantedAuthoritiesConverter(jwtGrantedAuthoritiesConverter); jwtAuthenticationConverter.setJwtGrantedAuthoritiesConverter(jwtGrantedAuthoritiesConverter);
return new ReactiveJwtAuthenticationConverterAdapter(jwtAuthenticationConverter); return new ReactiveJwtAuthenticationConverterAdapter(jwtAuthenticationConverter);
} }
public static Mono writeFailedToResponse(ServerHttpResponse response, ResultCode resultCode){ public static Mono writeFailedToResponse(ServerHttpResponse response, ResultCode resultCode) {
response.setStatusCode(HttpStatus.OK); response.setStatusCode(HttpStatus.OK);
response.getHeaders().set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); response.getHeaders().set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
response.getHeaders().set("Access-Control-Allow-Origin", "*"); response.getHeaders().set("Access-Control-Allow-Origin", "*");
response.getHeaders().set("Cache-Control", "no-cache"); response.getHeaders().set("Cache-Control", "no-cache");
String body = JSONUtil.toJsonStr(Result.failed(resultCode)); String body = JSONUtil.toJsonStr(Result.failed(resultCode));
DataBuffer buffer = response.bufferFactory().wrap(body.getBytes(StandardCharsets.UTF_8)); DataBuffer buffer = response.bufferFactory().wrap(body.getBytes(StandardCharsets.UTF_8));
return response.writeWith(Mono.just(buffer)) return response.writeWith(Mono.just(buffer))
.doOnError(error -> DataBufferUtils.release(buffer)); .doOnError(error -> DataBufferUtils.release(buffer));
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment