package com.example.jz.auth;
|
|
import org.springframework.security.authentication.AuthenticationManager;
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
import org.springframework.security.core.GrantedAuthority;
|
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
|
|
import javax.servlet.FilterChain;
|
import javax.servlet.ServletException;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.Collection;
|
import java.util.List;
|
|
/**
|
* @author 安瑾然
|
* @data 2022/7/18 - 10:56 AM
|
* @description
|
*/
|
public class TokenAuthFilter extends BasicAuthenticationFilter {
|
|
private TokenJwtManager tokenJwtManager;
|
|
public TokenAuthFilter(AuthenticationManager authenticationManager, TokenJwtManager tokenJwtManager) {
|
super(authenticationManager);
|
this.tokenJwtManager = tokenJwtManager;
|
}
|
|
@Override
|
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
|
//获取当前认证成功用户权限信息
|
UsernamePasswordAuthenticationToken authRequest = getAuthentication(request);
|
if(authRequest != null){
|
// 有权限,则放入权限上下文中
|
SecurityContextHolder.getContext().setAuthentication(authRequest);
|
}
|
// 执行下一个 filter 过滤器链
|
chain.doFilter(request,response);
|
}
|
|
private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) {
|
//从header获取token
|
String token = request.getHeader("token");
|
if(token != null) {
|
//从token获取用户名
|
String username = tokenJwtManager.getUserName(token);
|
// 登录成功时,会将权限数据存入redis
|
// 这里是验证获取权限信息
|
// 1、从redis中获取对应该用户的权限信息
|
// 2、或从数据库中再次查询
|
List<String> permissionValueList = Arrays.asList("admin","select");
|
Collection<GrantedAuthority> authority = new ArrayList<>();
|
for(String permissionValue : permissionValueList) {
|
SimpleGrantedAuthority auth = new SimpleGrantedAuthority(permissionValue);
|
authority.add(auth);
|
}
|
return new UsernamePasswordAuthenticationToken(username,token,authority);
|
}
|
return null;
|
}
|
}
|