吴学文
2019-03-20 4a7837c46a5d10755ba1eeb29f833c3eaa8a703e
java110-service/src/main/java/com/java110/service/filter/JwtFilter.java
@@ -1,16 +1,13 @@
package com.java110.service.filter;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.java110.common.constant.CommonConstant;
import com.java110.common.constant.ResponseConstant;
import com.java110.common.exception.FilterException;
import com.java110.common.factory.DataTransactionFactory;
import com.java110.core.factory.AuthenticationFactory;
import com.java110.core.factory.DataTransactionFactory;
import com.java110.common.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.filter.GenericFilterBean;
import javax.servlet.FilterChain;
@@ -22,13 +19,15 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Map;
/**
 * Created by wuxw on 2018/5/2.
 */
public class JwtFilter extends GenericFilterBean {
    private final static Logger logger = LoggerFactory.getLogger(JwtFilter.class);
    public void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain chain)
            throws IOException, ServletException {
@@ -40,17 +39,10 @@
            //获取token
            token = this.getToken(request);
            try {
                Algorithm algorithm = Algorithm.HMAC256("secret");
                JWTVerifier verifier = JWT.require(algorithm).withIssuer("auth0").build();
                DecodedJWT jwt = verifier.verify(token);
                Map<String, Claim> claims = jwt.getClaims();
                // Add the claim to request header
                Map<String, String> claims = AuthenticationFactory.verifyToken(token);
                request.setAttribute("claims", claims);
            } catch (UnsupportedEncodingException e) {
                logger.error("解析token 失败 :", e);
                throw new FilterException(ResponseConstant.RESULT_CODE_NO_AUTHORITY_ERROR, "您还没有登录,请先登录");
            } catch (JWTVerificationException e) {
            } catch (Exception e) {
                //Invalid signature/claims
                logger.error("解析token 失败 :", e);
                throw new FilterException(ResponseConstant.RESULT_CODE_NO_AUTHORITY_ERROR, "您还没有登录,请先登录");
@@ -63,11 +55,11 @@
                        DataTransactionFactory.pageResponseJson(ResponseConstant.RESULT_CODE_NO_AUTHORITY_ERROR,e.getMessage(),null),
                        "UTF-8");
            }else{
                response.sendRedirect("/error?code="+e.getResult().getCode()+"&msg="+e.getResult().getMsg());
                response.sendRedirect("/login");
            }
        }catch (Exception e){
            response.sendRedirect("/error?code="+ResponseConstant.RESULT_CODE_INNER_ERROR+"&msg=鉴权失败");
            response.sendRedirect("/login");
        }
    }