package com.sandu.common.security; import cn.hutool.core.util.StrUtil; import com.sandu.common.security.config.SecurityProperties; import com.sandu.common.security.token.TokenProvider; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; 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; /** * spring security过滤器 * 根据token拿到用户信息,放入spring security * * @author chenjiantian */ @Slf4j @AllArgsConstructor public class TokenFilter extends OncePerRequestFilter { private final TokenProvider tokenProvider; private final SecurityProperties properties; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String token = request.getHeader(properties.getHeader()); if (token != null && token.startsWith(properties.getTokenStartWith())) { token = token.substring(properties.getTokenStartWith().length()); } LoginUserInfo loginUserInfo = tokenProvider.validateToken(token); if (loginUserInfo != null) { if (StrUtil.equals(loginUserInfo.getToken(), token)) { Authentication authentication = new UsernamePasswordAuthenticationToken( loginUserInfo, null, loginUserInfo.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(authentication); } } filterChain.doFilter(request, response); } }