(day two)基于Gateway网关拦截器和Redis实现单点登录和认证
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.HttpStatus;
import org.springframework.web.reactive.function.server.ServerResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@Configuration
public class GatewayConfig {
@Bean
public GatewayFilter loginFilter() {
return ((exchange, chain) -> {
// 检查Redis中是否存在用户的Token
String token = exchange.getRequest().getHeaders().getFirst("Token");
StringRedisTemplate redisTemplate = connectionFactory.getStringRedisTemplate();
Boolean hasKey = redisTemplate.hasKey(token);
if (hasKey != null && hasKey) {
// Token存在,继续请求
return chain.filter(exchange);
} else {
// Token不存在,返回未授权的响应
return ServerResponse.status(HttpStatus.UNAUTHORIZED)
.body(Mono.just("Token is invalid or not found"), String.class);
}
});
}
// 注意:以下代码省略了RedisConnectionFactory的定义和注入,请自行添加
// @Autowired
// private RedisConnectionFactory connectionFactory;
}
这个代码实例展示了如何在Spring Cloud Gateway中使用自定义的GatewayFilter来实现单点登录和验证。它通过检查请求中的Token是否存在于Redis数据库中,来判断用户是否已经登录。如果Token有效,则允许请求继续;如果无效或不存在,则返回未授权的响应。这个例子省略了RedisConnectionFactory的定义和注入,请根据实际情况自行添加。
评论已关闭