Coverage Summary for Class: AuthenticationFilter (cn.edu.ecnu.stu.bookstore.filter)

Class Class, % Method, % Line, %
AuthenticationFilter 100% (1/1) 100% (3/3) 100% (12/12)


 package cn.edu.ecnu.stu.bookstore.filter;
 
 import cn.edu.ecnu.stu.bookstore.pojo.User;
 import cn.edu.ecnu.stu.bookstore.utils.JwtUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
 import org.springframework.web.filter.OncePerRequestFilter;
 
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
 @Component
 public class AuthenticationFilter extends OncePerRequestFilter {
 
     @Autowired
     private RedisTemplate redisTemplate;
 
     private boolean hasLogin(Integer userId) {
         String s = (String)redisTemplate.opsForValue().get("userId:" + userId);
         return StringUtils.hasText(s);
     }
 
     @Override
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
         String token = request.getHeader("token");
         if(!StringUtils.hasText(token)){
             filterChain.doFilter(request, response);
             return;
         }
         User user = (User) JwtUtil.getTokenInfo(token, User.class);
         if(!hasLogin(user.getId())) {
             filterChain.doFilter(request, response);
             return;
         }
         UsernamePasswordAuthenticationToken token1 = new UsernamePasswordAuthenticationToken(user, null, null);
         SecurityContextHolder.getContext().setAuthentication(token1);
         filterChain.doFilter(request, response);
     }
 }