﻿{"id":683,"date":"2019-03-03T15:28:27","date_gmt":"2019-03-03T07:28:27","guid":{"rendered":"https:\/\/www.chenweikang.top\/?p=683"},"modified":"2019-03-03T15:28:27","modified_gmt":"2019-03-03T07:28:27","slug":"spring-cloud-%e9%a1%b9%e7%9b%ae%e5%ae%9e%e6%88%98-%e5%9f%ba%e4%ba%8ejwt%e7%9a%84token%e8%ae%a4%e8%af%81","status":"publish","type":"post","link":"https:\/\/www.chenweikang.top\/?p=683","title":{"rendered":"spring cloud \u9879\u76ee\u5b9e\u6218 \u2013 \u57fa\u4e8ejwt\u7684token\u8ba4\u8bc1"},"content":{"rendered":"<blockquote><p>JWT\u662f\u57fa\u4e8etoken\u7684\u8eab\u4efd\u8ba4\u8bc1\u7684\u65b9\u6848\u3002<\/p>\n<p>json web token\u5168\u79f0\u3002\u53ef\u4ee5\u4fdd\u8bc1\u5b89\u5168\u4f20\u8f93\u7684\u524d\u63d0\u4e0b\u4f20\u9001\u4e00\u4e9b\u57fa\u672c\u7684\u4fe1\u606f\uff0c\u4ee5\u51cf\u8f7b\u5bf9\u5916\u90e8\u5b58\u50a8\u7684\u4f9d\u8d56\uff0c\u51cf\u5c11\u4e86\u5206\u5e03\u5f0f\u7ec4\u4ef6\u7684\u4f9d\u8d56\uff0c\u51cf\u5c11\u4e86\u786c\u4ef6\u7684\u8d44\u6e90\u3002<\/p>\n<p>\u53ef\u5b9e\u73b0\u65e0\u72b6\u6001\u3001\u5206\u5e03\u5f0f\u7684Web\u5e94\u7528\u6388\u6743\uff0cjwt\u7684\u5b89\u5168\u7279\u6027\u4fdd\u8bc1\u4e86token\u7684\u4e0d\u53ef\u4f2a\u9020\u548c\u4e0d\u53ef\u7be1\u6539\u3002<\/p>\n<p>\u672c\u8d28\u4e0a\u662f\u4e00\u4e2a\u72ec\u7acb\u7684\u8eab\u4efd\u9a8c\u8bc1\u4ee4\u724c\uff0c\u53ef\u4ee5\u5305\u542b\u7528\u6237\u6807\u8bc6\u3001\u7528\u6237\u89d2\u8272\u548c\u6743\u9650\u7b49\u4fe1\u606f\uff0c\u4ee5\u53ca\u60a8\u53ef\u4ee5\u5b58\u50a8\u4efb\u4f55\u5176\u4ed6\u4fe1\u606f\uff08\u81ea\u5305\u542b\uff09\u3002\u4efb\u4f55\u4eba\u90fd\u53ef\u4ee5\u8f7b\u677e\u8bfb\u53d6\u548c\u89e3\u6790\uff0c\u5e76\u4f7f\u7528\u5bc6\u94a5\u6765\u9a8c\u8bc1\u771f\u5b9e\u6027\u3002<\/p><\/blockquote>\n<p><a href=\"https:\/\/www.chenweikang.top\/wp-content\/uploads\/2019\/03\/jwt-token.png\" class=\"gallery_colorbox\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-684\" src=\"https:\/\/www.chenweikang.top\/wp-content\/uploads\/2019\/03\/jwt-token.png\"  alt=\"\" width=\"670\" height=\"479\" srcset=\"https:\/\/www.chenweikang.top\/wp-content\/uploads\/2019\/03\/jwt-token.png 670w, https:\/\/www.chenweikang.top\/wp-content\/uploads\/2019\/03\/jwt-token-300x214.png 300w\" sizes=\"auto, (max-width: 670px) 100vw, 670px\" \/><\/a><\/p>\n<h2>\u7f16\u5199JWT\u5de5\u5177\u7c7b JWTUtils<\/h2>\n<pre>package com.fm.vege.base.util;\r\n\r\nimport com.auth0.jwt.JWT;\r\nimport com.auth0.jwt.JWTVerifier;\r\nimport com.auth0.jwt.algorithms.Algorithm;\r\nimport com.auth0.jwt.exceptions.JWTDecodeException;\r\nimport com.auth0.jwt.exceptions.JWTVerificationException;\r\nimport com.auth0.jwt.interfaces.DecodedJWT;\r\nimport org.slf4j.Logger;\r\nimport org.slf4j.LoggerFactory;\r\n\r\nimport java.util.Date;\r\n\r\npublic class JWTUtils {\r\n\r\n    private static final String SECRET = \"QAZwsx1234\";\r\n\r\n    private static final String ISS_USER = \"jwt.auth\";\r\n    private static final String ID_CLAIM = \"id\";\r\n    \/**\r\n     * \u9ed8\u8ba4\u8fc7\u671f2\u5c0f\u65f6\r\n     *\/\r\n    private static final long EXPIRE_TIME = 2 * 60 * 60 * 1000;\r\n\r\n    private static final Logger logger = LoggerFactory.getLogger(JWTUtils.class);\r\n\r\n    \/**\r\n     * \u751f\u6210\u7528\u6237token\r\n     * @param playLoad\r\n     * @return String\r\n     *\/\r\n    public static String sign(PayLoadInfo playLoad){\r\n        Algorithm algorithm = Algorithm.HMAC256(SECRET);\r\n        if(playLoad.getExp() == null){\r\n            \/\/\u8bbe\u7f6e\u9ed8\u8ba4\u8fc7\u671f\u65f6\u95f4\r\n            playLoad.setExp(System.currentTimeMillis() + EXPIRE_TIME);\r\n        }\r\n        if(playLoad.getUserId() == null){\r\n            logger.error(\"\u751f\u6210token\u5931\u8d25\uff0cuserId\u4e0d\u5f97\u4e3a\u7a7a\uff01\");\r\n            return \"\";\r\n        }\r\n        if(playLoad.getUserId() == null){\r\n            logger.error(\"\u751f\u6210token\u5931\u8d25\uff0cuserType\u4e0d\u5f97\u4e3a\u7a7a\uff01\");\r\n            return \"\";\r\n        }\r\n        if(playLoad.getUserId() == null){\r\n            logger.error(\"\u751f\u6210token\u5931\u8d25\uff0cuserName\u4e0d\u5f97\u4e3a\u7a7a\uff01\");\r\n            return \"\";\r\n        }\r\n        String face = \"\";\r\n        if(playLoad.getFace() != null){\r\n            face = playLoad.getFace();\r\n        }\r\n        String token = JWT.create()\r\n                .withIssuer(ISS_USER).\r\n                        withIssuedAt(new Date(System.currentTimeMillis())).\r\n                        withExpiresAt(new Date(playLoad.getExp())).\r\n                        withClaim(\"username\",playLoad.getUsername()).\r\n                        withClaim(\"face\",face).\r\n                        withClaim(\"userType\",playLoad.getUserType()).\r\n                        withClaim(ID_CLAIM,playLoad.getUserId()).\r\n                        sign(algorithm);\r\n        return token;\r\n    }\r\n\r\n\r\n    \/**\r\n     * \u6821\u9a8ctoken\r\n     *\r\n     * @param token token\u503c\r\n     * @return boolean\r\n     *\/\r\n    public static boolean verifyToken(String token) {\r\n        try {\r\n            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET))\r\n                    .withIssuer(ISS_USER)\r\n                    .build();\r\n            verifier.verify(token);\r\n            return true;\r\n        } catch (JWTVerificationException e) {\r\n            logger.error(\"verifyToken \u6821\u9a8ctoken\u5931\u8d25\uff1a{}\",e.getMessage());\r\n            return false;\r\n        } catch (Exception e) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * \u6821\u9a8ctoken \u5e76\u8fd4\u56de DecodedJWT\r\n     *\r\n     * @param token token\u503c\r\n     * @return DecodedJWT\r\n     *\/\r\n    public static DecodedJWT verifyAndReturn(String token) {\r\n        try {\r\n            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET))\r\n                    .withIssuer(ISS_USER).build();\r\n            return verifier.verify(token);\r\n        } catch (JWTVerificationException e) {\r\n            logger.error(\"verifyAndReturn \u6821\u9a8ctoken\u5931\u8d25\uff1a{},id = {}\",e.getMessage());\r\n            return null;\r\n        } catch (Exception e) {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * \u6821\u9a8c\u5e76\u8fd4\u56de\u7528\u6237\u7c7b\u578b\r\n     * @param token\r\n     * @return Integer\r\n     *\/\r\n    public static Integer verifyAndReturnUserType(String token) {\r\n        try {\r\n            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET))\r\n                    .withIssuer(ISS_USER).build();\r\n            return verifier.verify(token).getClaim(\"userType\").asInt();\r\n        } catch (JWTVerificationException e) {\r\n            logger.error(\"verifyAndReturn \u6821\u9a8ctoken\u5931\u8d25\uff1a{},id = {}\",e.getMessage());\r\n            return null;\r\n        } catch (Exception e) {\r\n            return null;\r\n        }\r\n    }\r\n\r\n\r\n    \/**\r\n     * \u6821\u9a8ctoken\r\n     *\r\n     * @param token token\u503c\r\n     * @param id    \u7528\u6237\u7684id\r\n     * @return boolean\r\n     *\/\r\n    public static boolean verify(String token, Long id) {\r\n        try {\r\n            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET))\r\n                    .withIssuer(ISS_USER)\r\n                    .withClaim(ID_CLAIM, id)\r\n                    .build();\r\n            verifier.verify(token);\r\n            return true;\r\n        } catch (JWTVerificationException e) {\r\n            logger.error(\"verify \u6821\u9a8ctoken\u5931\u8d25\uff1a{},id = {}\",e.getMessage(),id);\r\n            return false;\r\n        } catch (Exception e) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n\r\n    \/**\r\n     * \u83b7\u53d6\u7528\u6237id\r\n     *\r\n     * @param token token\u503c\r\n     * @return java.lang.Long\r\n     *\/\r\n    public static Long getId(String token) {\r\n        try {\r\n            DecodedJWT jwt = JWT.decode(token);\r\n            return jwt.getClaim(ID_CLAIM).asLong();\r\n        } catch (JWTDecodeException e) {\r\n            logger.error(\"\u83b7\u53d6\u7528\u6237id\u5931\u8d25\uff1a{}\",e.getMessage());\r\n            return null;\r\n        } catch (Exception e) {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * \u83b7\u53d6\u9881\u53d1\u65f6\u95f4\r\n     *\r\n     * @param token token\u503c\r\n     * @return java.util.Date\r\n     *\/\r\n    public static Date getIssuedDate(String token) {\r\n        try {\r\n            DecodedJWT jwt = JWT.decode(token);\r\n            return jwt.getIssuedAt();\r\n        } catch (JWTDecodeException e) {\r\n            logger.error(\"\u83b7\u53d6\u9881\u53d1\u65f6\u95f4\u5931\u8d25\uff1a{}\",e.getMessage());\r\n            return null;\r\n        } catch (Exception e) {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * \u83b7\u53d6\u8fc7\u671f\u65f6\u95f4\r\n     *\r\n     * @param token token\u503c\r\n     * @return java.util.Date\r\n     *\/\r\n    public static Date getExpireDate(String token) {\r\n        try {\r\n            DecodedJWT jwt = JWT.decode(token);\r\n            return jwt.getExpiresAt();\r\n        } catch (JWTDecodeException e) {\r\n            logger.error(\"\u83b7\u53d6\u8fc7\u671f\u65f6\u95f4\u5931\u8d25\uff1a{}\",e.getMessage());\r\n            return null;\r\n        } catch (Exception e) {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * \u5224\u65ad\u662f\u5426\u8fc7\u671f\r\n     *\r\n     * @param token token\u503c\r\n     * @return boolean\r\n     *\/\r\n    public static boolean isExpire(String token) {\r\n        try {\r\n            DecodedJWT jwt = JWT.decode(token);\r\n            return jwt.getExpiresAt().compareTo(new Date()) &lt;= 0 ? true : false;\r\n        } catch (JWTDecodeException e) {\r\n            return true;\r\n        } catch (Exception e) {\r\n            return true;\r\n        }\r\n    }\r\n\r\n\r\n}<\/pre>\n<p>PayLoadInfo:<\/p>\n<pre>package com.fm.vege.base.util;\r\nimport lombok.Data;\r\n@Data\r\npublic class PayLoadInfo {\r\n    \/**\r\n     * iss: \u8be5JWT\u7684\u7b7e\u53d1\u8005\uff0c\u662f\u5426\u4f7f\u7528\u662f\u53ef\u9009\u7684\uff1b\r\n     * sub: \u8be5JWT\u6240\u9762\u5411\u7684\u7528\u6237\uff0c\u662f\u5426\u4f7f\u7528\u662f\u53ef\u9009\u7684\uff1b\r\n     * aud: \u63a5\u6536\u8be5JWT\u7684\u4e00\u65b9\uff0c\u662f\u5426\u4f7f\u7528\u662f\u53ef\u9009\u7684\uff1b\r\n     * exp(expires): \u4ec0\u4e48\u65f6\u5019\u8fc7\u671f\uff0c\u8fd9\u91cc\u662f\u4e00\u4e2aUnix\u65f6\u95f4\u6233\uff0c\u662f\u5426\u4f7f\u7528\u662f\u53ef\u9009\u7684\uff1b\r\n     * iat(issued at): \u5728\u4ec0\u4e48\u65f6\u5019\u7b7e\u53d1\u7684(UNIX\u65f6\u95f4)\uff0c\u662f\u5426\u4f7f\u7528\u662f\u53ef\u9009\u7684\uff1b\r\n     * \u5176\u4ed6\u8fd8\u6709\uff1a\r\n     * nbf (Not Before)\uff1a\u5982\u679c\u5f53\u524d\u65f6\u95f4\u5728nbf\u91cc\u7684\u65f6\u95f4\u4e4b\u524d\uff0c\u5219Token\u4e0d\u88ab\u63a5\u53d7\uff1b\u4e00\u822c\u90fd\u4f1a\u7559\u4e00\u4e9b\u4f59\u5730\uff0c\u6bd4\u5982\u51e0\u5206\u949f\uff1b\uff0c\u662f\u5426\u4f7f\u7528\u662f\u53ef\u9009\u7684\uff1b\r\n     *\/\r\n    \/**\r\n     * \u5fc5\u586b\r\n     *\/\r\n    private Long userId;\r\n    \/**\r\n     * \u7528\u6237\u7c7b\u578b 1 \u7ba1\u7406\u5458 2 \u5356\u5bb6 3 \u666e\u901a\u7528\u6237\r\n     *\/\r\n    private Integer userType;\r\n    \/**\r\n     * \u7528\u6237\u540d\r\n     *\/\r\n    private String username;\r\n\r\n    \/**\r\n     * \u5934\u50cf\u5730\u5740\r\n     *\/\r\n    private String face;\r\n\r\n    \/**\r\n     * \u53ef\u9009\r\n     *\/\r\n    private String iss;\r\n    \/**\r\n     * \u53ef\u9009\r\n     *\/\r\n    private Long exp;\r\n    \/**\r\n     * \u53ef\u9009\r\n     *\/\r\n    private Long iat;\r\n\r\n}<\/pre>\n<h2>\u767b\u5f55\u6210\u529f\u540e\u751f\u6210token\u7b7e\u540d<\/h2>\n<p>\u7f51\u9875\u7528\u6237\u767b\u5f55\u6210\u529f\u540e\uff0c\u751f\u6210\u5e76\u8fd4\u56detoken\uff0c\u7136\u540e\u5b58\u50a8\u5230\u6d4f\u89c8\u5668cookie\uff0c\u4ee5\u540e\u6bcf\u6b21\u8bf7\u6c42\u9700\u8981\u643a\u5e26\u8be5token\u8fdb\u884c\u8eab\u4efd\u8ba4\u8bc1<\/p>\n<pre>@Override\r\npublic Rsp&lt;SellerLoginBO&gt; loginSeller(LoginReqBO reqBO) {\r\n    if(reqBO.getUsername() == null || reqBO.getPassword() == null){\r\n        throw new BusinessException(BaseConstants.RSP_ERROR,\"\u7528\u6237\u540d\u6216\u5bc6\u7801\u4e0d\u5f97\u4e3a\u7a7a\uff01\");\r\n    }\r\n    SellerPO sellerPO = new SellerPO();\r\n    sellerPO.setLoginName(reqBO.getUsername());\r\n    sellerPO.setLoginPwd(reqBO.getPassword());\r\n    SellerPO seller = sellerMapper.selectByLoginNameAndPass(sellerPO);\r\n    if(seller == null){\r\n        throw new BusinessException(BaseConstants.RSP_ERROR,\"\u7528\u6237\u540d\u6216\u5bc6\u7801\u4e0d\u6b63\u786e\uff01\");\r\n    }else{\r\n        PayLoadInfo payLoadInfo = new PayLoadInfo();\r\n        payLoadInfo.setUserId(seller.getSellerId());\r\n        payLoadInfo.setUserType(DictionaryUserField.USER_TYPE_SELLER.getValue());\r\n        payLoadInfo.setUsername(sellerPO.getLoginName());\r\n        \/\/\u6a21\u62df\u7528\u6237\u5934\u50cf\r\n        if(sellerPO.getSellerPhoto() == null){\r\n            payLoadInfo.setFace(\"\/img\/face.jpg\");\r\n        }else{\r\n            payLoadInfo.setFace(sellerPO.getSellerPhoto());\r\n        }\r\n        String token = JWTUtils.sign(payLoadInfo);\r\n        if(\"\".equals(token)){\r\n            throw new BusinessException(BaseConstants.RSP_ERROR,\"\u767b\u5f55\u5931\u8d25\uff0ctoken\u521b\u5efa\u5931\u8d25\uff01\");\r\n        }\r\n        SellerLoginBO loginBO = new SellerLoginBO();\r\n        Rsp&lt;SellerLoginBO&gt; rsp = new Rsp&lt;&gt;();\r\n        BeanUtils.copyProperties(seller,loginBO);\r\n        loginBO.setToken(token);\r\n        rsp.setData(loginBO);\r\n        rsp.setRspCode(BaseConstants.RSP_SUCCESS);\r\n        rsp.setRspDesc(\"login successful!\");\r\n        return rsp;\r\n    }\r\n}<\/pre>\n<h2>\u7f16\u5199\u7f51\u5173\u62e6\u622a\u5668\uff0c\u8fdb\u884c\u8eab\u4efd\u8ba4\u8bc1<\/h2>\n<p>\u5728zuul-router\u5de5\u7a0b\u65b0\u5efa\u62e6\u622a\u5668<\/p>\n<pre>\r\n@Component\r\npublic class AuthFilter extends ZuulFilter {\r\n\r\n    private static final Logger logger = LoggerFactory.getLogger(AuthFilter.class);\r\n\r\n    @Override\r\n    public String filterType() {\r\n        \/**\r\n         * \u8fd9\u91cc\u5f88\u91cd\u8981\uff0c\u8bbe\u7f6e\u62e6\u622a\u7c7b\u578b\u4e3apost\u8bf7\u6c42\u4e4b\u524d\r\n         *\/\r\n        return FilterConstants.PRE_TYPE;\r\n    }\r\n\r\n    @Override\r\n    public int filterOrder() {\r\n        \/**\r\n         * \u62e6\u622a\u5668\u5230\u4f18\u5148\u7ea7\uff0c\u6570\u5b57\u8d8a\u5927\u7684\u4f18\u5148\u6267\u884c\r\n         *\/\r\n        return 1;\r\n    }\r\n\r\n    \/**\r\n     * \u5b9a\u4e49\u5ffd\u7565\u7684\u4e00\u4e9b\u8bf7\u6c42\uff0c\u6bd4\u5982\u767b\u5f55\u4e4b\u7c7b\u7684\u8bf7\u6c42 \u4e0d\u9700\u8981\u8d70\u62e6\u622a\u5668\u8ba4\u8bc1\r\n     *\/\r\n    private static List&lt;String&gt; ignoreApi = null;\r\n\r\n    static {\r\n        ignoreApi = Lists.newArrayList();\r\n        ignoreApi.add(\"\/user-api\/api\/login\/admin\");\r\n        ignoreApi.add(\"\/user-api\/api\/login\/seller\");\r\n        ignoreApi.add(\"\/user-api\/api\/register\/seller\");\r\n        ignoreApi.add(\"\/user-api\/api\/register\/user\");\r\n        ignoreApi.add(\"\/user-api\/api\/sms\/send\");\r\n        ignoreApi.add(\"\/user-api\/api\/sms\/get\");\r\n    }\r\n\r\n    @Override\r\n    public boolean shouldFilter() {\r\n        \/\/\u5171\u4eabRequestContext\uff0c\u4e0a\u4e0b\u6587\u5bf9\u8c61\r\n        RequestContext requestContext = RequestContext.getCurrentContext();\r\n        HttpServletRequest request = requestContext.getRequest();\r\n        logger.info(\"request uri : {}\",request.getRequestURI());\r\n        \/\/\u4e0d\u9700\u8981\u6743\u9650\u6821\u9a8cURL\r\n        for (String api : ignoreApi) {\r\n            if (api.equalsIgnoreCase(request.getRequestURI())) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    @Override\r\n    public Object run() throws ZuulException {\r\n        \/\/JWT\r\n        RequestContext requestContext = RequestContext.getCurrentContext();\r\n        HttpServletRequest request = requestContext.getRequest();\r\n\r\n        \/\/token\u5bf9\u8c61,\u6709\u53ef\u80fd\u5728\u8bf7\u6c42\u5934\u4f20\u9012\u8fc7\u6765\uff0c\u4e5f\u6709\u53ef\u80fd\u662f\u901a\u8fc7\u53c2\u6570\u4f20\u8fc7\u6765\uff0c\u5b9e\u9645\u5f00\u53d1\u4e00\u822c\u90fd\u662f\u8bf7\u6c42\u5934\u65b9\u5f0f\r\n        String token = request.getHeader(\"token\");\r\n\r\n        if (StringUtils.isBlank((token))) {\r\n            token = request.getParameter(\"token\");\r\n        }\r\n        logger.info(\"\u9875\u9762\u4f20\u6765\u7684token\u503c\u4e3a\uff1a{}\", token);\r\n        \/\/\u767b\u5f55\u6821\u9a8c\u903b\u8f91  \u5982\u679ctoken\u4e3anull\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\u5ba2\u6237\u7aef\uff0c\u800c\u4e0d\u8fdb\u884c\u4e0b\u4e00\u6b65\u63a5\u53e3\u8c03\u7528\r\n        if (StringUtils.isBlank(token)) {\r\n            \/\/ \u8fc7\u6ee4\u8be5\u8bf7\u6c42\uff0c\u4e0d\u5bf9\u5176\u8fdb\u884c\u8def\u7531\r\n            requestContext.setSendZuulResponse(false);\r\n            \/\/\u8fd4\u56de\u9519\u8bef\u4ee3\u7801\r\n            requestContext.setResponseStatusCode(401);\r\n            return null;\r\n        } else {\r\n            String requestURI = request.getRequestURI();\r\n            <span style=\"color: #ff0000;\">Integer userType = JWTUtils.verifyAndReturnUserType(token);<\/span>\r\n            if (userType == null) {\r\n                logger.info(\"\u975e\u6cd5\u8bf7\u6c42\uff1a{}\", request.getRequestURI());\r\n                \/\/ \u8fc7\u6ee4\u8be5\u8bf7\u6c42\uff0c\u4e0d\u5bf9\u5176\u8fdb\u884c\u8def\u7531\r\n                requestContext.setSendZuulResponse(false);\r\n                \/\/\u8fd4\u56de\u9519\u8bef\u4ee3\u7801\r\n                requestContext.setResponseStatusCode(401);\r\n                return null;\r\n            }\r\n            logger.info(\"\u7528\u6237\u7c7b\u578b\uff1a{} , userType = {} \", DictionaryUserField.getDescByValue(userType),userType);\r\n            \/\/\u7ba1\u7406\u5458\r\n            if (DictionaryUserField.USER_TYPE_ADMIN.getValue().equals(userType)) {\r\n\r\n\r\n            } else if (DictionaryUserField.USER_TYPE_SELLER.getValue().equals(userType)) {\r\n                \/\/\u5356\u5bb6\r\n\r\n                if (request.getRequestURI().contains(\"\/api\/admin\")) {\r\n                    logger.info(\"\u975e\u6cd5\u8bf7\u6c42,\u7981\u6b62\u666e\u901a\u7528\u6237\u8bbf\u95ee\u63a5\u53e3\uff1a{}\", request.getRequestURI());\r\n                    \/\/ \u8fc7\u6ee4\u8be5\u8bf7\u6c42\uff0c\u4e0d\u5bf9\u5176\u8fdb\u884c\u8def\u7531\r\n                    requestContext.setSendZuulResponse(false);\r\n                    \/\/\u8fd4\u56de\u9519\u8bef\u4ee3\u7801\r\n                    requestContext.setResponseStatusCode(401);\r\n                    return null;\r\n                }\r\n\r\n            } else if (DictionaryUserField.USER_TYPE_PT.getValue().equals(userType)) {\r\n                \/\/\u666e\u901a\u7528\u6237\r\n            }\r\n            return null;\r\n        }\r\n    }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>\u8f6c\u8f7d\u8bf7\u6ce8\u660e\uff1a<a href=\"https:\/\/www.chenweikang.top\">\u5de6\u624b\u4ee3\u7801\u53f3\u624b\u8bd7<\/a> &raquo; <a href=\"https:\/\/www.chenweikang.top\/?p=683\">spring cloud \u9879\u76ee\u5b9e\u6218 \u2013 \u57fa\u4e8ejwt\u7684token\u8ba4\u8bc1<\/a><\/p><div class=\"__youshang\">\r\n            <div id=\"__youshang_popup\" class=\"wechat popup\" style=\"display: none;\">\r\n                <div class=\"head\">~\u8c22\u8c22\u6253\u8d4f~<\/div>\r\n                <div class=\"qrcode\"><div class=\"qrcode-li wechat\" ><img src=\"https:\/\/www.chenweikang.top\/wp-content\/uploads\/2019\/07\/wexin.png\" \/><\/div><div class=\"qrcode-li alipay\" style=\"display:none;\"><img src=\"https:\/\/www.chenweikang.top\/wp-content\/uploads\/2019\/07\/ali-pay.png\" \/><\/div><div class=\"qrcode-li hongbao\" style=\"display:none;\"><img src=\"https:\/\/www.chenweikang.top\/wp-content\/uploads\/2019\/07\/ali-hongbao.png\" \/><\/div><\/div>\r\n                <ul class=\"platform\"><li class=\"icon-wechat active\" data-bg-color=\"#05af4e\" data-thanks=\"~\u8c22\u8c22\u6253\u8d4f~\"><\/li><li class=\"icon-alipay \" data-bg-color=\"#00a2ea\" data-thanks=\"~\u8c22\u8c22\u6253\u8d4f~\"><\/li><li class=\"icon-hongbao \" data-bg-color=\"#dd5746\" data-thanks=\"<p>\u626b\u7801\u9886\u7ea2\u5305<\/p><p style='margin-top: 24px;'>\uff08\u4f59\u989d\u5b9d\u652f\u4ed8\u65f6\u53ef\u62b5\u73b0\uff09<\/p>\"><\/li><\/ul>\r\n            <\/div>\r\n            <a href=\"javascript:void(0);\" id=\"__youshang_btn\">\u8d4f<\/a>\r\n        <\/div>","protected":false},"excerpt":{"rendered":"<p>JWT\u662f\u57fa\u4e8etoken\u7684\u8eab\u4efd\u8ba4\u8bc1\u7684\u65b9\u6848\u3002 json web token\u5168\u79f0\u3002\u53ef\u4ee5\u4fdd\u8bc1\u5b89\u5168\u4f20\u8f93\u7684\u524d\u63d0\u4e0b\u4f20\u9001\u4e00\u4e9b\u57fa [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[72,73],"class_list":["post-683","post","type-post","status-publish","format-standard","hentry","category-website","tag-jwt","tag-73"],"_links":{"self":[{"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/posts\/683","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=683"}],"version-history":[{"count":0,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/posts\/683\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=683"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=683"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}