level 1
435656923
楼主
搞了个cloud的项目使用Gateway作为网关
想整合security做访问权限控制,但是项目原本是用jwt 做验证的
在百度和googel了好久只能将Gateway 和 security整合起来,但是怎么都整合不了jwt
问题卡在security拦截之后怎么把用户鉴权信息给到security这里
下面是拦截器,已经添加到security配置中
@Component
public class AuthFilter implements WebFilter {
@Autowired
TokenSign tokenSign;
// 解析token并生成UsernamePasswordAuthenticationToken
private UsernamePasswordAuthenticationToken getAuthentication(String token) {
BaUserpc user = tokenSign.verify(token);
if (user != null) {
Integer userid = user.getAutoid();
String openid = user.getOpenid();
String role = "ROLE_" + user.getRoleid();
if (userid != null) {
return new UsernamePasswordAuthenticationToken(openid, null,
Collections.singleton(new SimpleGrantedAuthority(role))
);
}
}
return null;
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
//这里已经进得来了 token解析也成功了
System.out.println("--------------------------");
ServerHttpRequest request = exchange.getRequest();
HttpHeaders header = request.getHeaders();
//获取token
String tokenHeader = header.getFirst("token");
// 如果请求头中有token,则进行解析,并且设置认证信息
SecurityContextHolder.getContext().setAuthentication(getAuthentication(tokenHeader));
return chain.filter(exchange);
}
}
没有拦截的可以正常路由,需要验证的怎么都不行,来大佬帮忙看看
2019年11月25日 01点11分
1
想整合security做访问权限控制,但是项目原本是用jwt 做验证的
在百度和googel了好久只能将Gateway 和 security整合起来,但是怎么都整合不了jwt
问题卡在security拦截之后怎么把用户鉴权信息给到security这里
下面是拦截器,已经添加到security配置中
@Component
public class AuthFilter implements WebFilter {
@Autowired
TokenSign tokenSign;
// 解析token并生成UsernamePasswordAuthenticationToken
private UsernamePasswordAuthenticationToken getAuthentication(String token) {
BaUserpc user = tokenSign.verify(token);
if (user != null) {
Integer userid = user.getAutoid();
String openid = user.getOpenid();
String role = "ROLE_" + user.getRoleid();
if (userid != null) {
return new UsernamePasswordAuthenticationToken(openid, null,
Collections.singleton(new SimpleGrantedAuthority(role))
);
}
}
return null;
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
//这里已经进得来了 token解析也成功了
System.out.println("--------------------------");
ServerHttpRequest request = exchange.getRequest();
HttpHeaders header = request.getHeaders();
//获取token
String tokenHeader = header.getFirst("token");
// 如果请求头中有token,则进行解析,并且设置认证信息
SecurityContextHolder.getContext().setAuthentication(getAuthentication(tokenHeader));
return chain.filter(exchange);
}
}
没有拦截的可以正常路由,需要验证的怎么都不行,来大佬帮忙看看