diff --git a/代码库/mall-admin/src/main/java/com/sock/mall/component/JwtAuthenticationTokenFilter.java b/代码库/mall-admin/src/main/java/com/sock/mall/component/JwtAuthenticationTokenFilter.java new file mode 100644 index 0000000..b7d8ed5 --- /dev/null +++ b/代码库/mall-admin/src/main/java/com/sock/mall/component/JwtAuthenticationTokenFilter.java @@ -0,0 +1,61 @@ +package com.macro.mall.component; + +import com.macro.mall.util.JwtTokenUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; +import org.springframework.stereotype.Component; +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; + +/** + * JWT¼Ȩ + * Created by macro on 2018/4/26. + */ +public class JwtAuthenticationTokenFilter extends OncePerRequestFilter { + private static final Logger LOGGER = LoggerFactory.getLogger(JwtAuthenticationTokenFilter.class); + /*Log4jUtils࣬LoggerIJ*/ + @Autowired + private UserDetailsService userDetailsService;//ûϸϢ + @Autowired + private JwtTokenUtil jwtTokenUtil;//jwt¼Ȩ + @Value("${jwt.tokenHeader}") + private String tokenHeader;//¼ͷ + @Value("${jwt.tokenHead}") + private String tokenHead; + + @Override + protected void doFilterInternal(HttpServletRequest request, + HttpServletResponse response, + FilterChain chain) throws ServletException, IOException { + /*Filterʵֹ˹*/ + String authHeader = request.getHeader(this.tokenHeader); + if (authHeader != null && authHeader.startsWith(this.tokenHead)) { + String authToken = authHeader.substring(this.tokenHead.length());// The part after "Bearer " + String username = jwtTokenUtil.getUserNameFromToken(authToken); + LOGGER.info("checking username:{}", username); + if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) { + UserDetails userDetails = this.userDetailsService.loadUserByUsername(username); + if (jwtTokenUtil.validateToken(authToken, userDetails)) { + /*֤ϢSecurityContextHolderУUsernamePasswordAuthenticationTokenSecurity֤˺Ĺ*/ + UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); + authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + LOGGER.info("authenticated user:{}", username); + SecurityContextHolder.getContext().setAuthentication(authentication); + } + } + } + chain.doFilter(request, response);//תһ + } +} \ No newline at end of file