1、需求
在spring security双token机制实现一文中已经实现了token的校验,在实际的项目中还需要根据用户的角色或用户Id对数据资源进行校验。
例如,有两个项目A和B,张三和李四都是项目实施人员这一角色,张三是项目A的项目组成员,李四是项目B的项目组成员,他们只能访问自己所属项目的资源。
2、实现
这里对spring security双token机制实现中的代码进行一部分改造。
2.1 改造TokenAuthenticationFilter
部分公共资源是可以不需要项目的权限就可以访问的,在前面的例子中,比如一些公共的模块(公司组织架构查询,帮助等)。token校验成功后可以将我们请求的资源需要的校验写入上下文中,以便过滤器链处理(代码中的NOTE注释)。
@Component
public class TokenAuthenticationFilter extends OncePerRequestFilter {
private UserMapper userMapper;
private TokenMapper tokenMapper;
private static final Logger logger = LoggerFactory.getLogger(TokenAuthenticationFilter.class);
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
if (userMapper == null) {
userMapper = SpringUtils.getBean(UserMapper.class);
}
if (tokenMapper == null) {
tokenMapper = SpringUtils.getBean(TokenMapper.class);
}
String tokenHeaderStr = request.getHeader("authorization");
String token = tokenHeaderStr.substring(7);
String userId = authenticateToken(token);
if (userId == null