javaweb多说本地身份说明(JWT)之小白技术指南

由于站点使用java开发 所以本技术说明仅适用于于java

根据官方说明文档


一个已经有用户系统的网站使用多说评论框,可以通过cookie,告知多说用户在站点中的身份,让站点用户可以直接评论。对于之前已经登录过的多说用户,如果两个身份没有产生关联关系,也会优先显示站点中的身份。<>

原理

将当前站点用户信息以JWT( JSON Web Token ) 的方式处理,生成token,把token设置成的cookies,评论框加载时会从cookies中获取token,得到当前站点用户信息,

{       
    "short_name": "official",
    "user_key": "1", 
    "name": "网站用户A"
}
  • short_name

    当前站点注册的多说二级域名。例如:你注册了http://apitest.duoshuo.com/时,多说二级域名为**apitest**。

  • user_key

    用户在当前站点中对应的唯一标示,通常是用户ID。

  • name

    用户在当前网站的用户名。


  • 我们可以获取大概流程 

  • 1.将二级域名、本地账户的id、评论时需要显示的名称以某种规定的方式生成字符串a。

  • package com.vtars.outsale.Utils.jwt;
    
    import net.minidev.json.JSONObject;
    
    import org.apache.log4j.Logger;
    
    import com.nimbusds.jose.JOSEException;
    import com.nimbusds.jose.JWSAlgorithm;
    import com.nimbusds.jose.JWSHeader;
    import com.nimbusds.jose.JWSObject;
    import com.nimbusds.jose.JWSSigner;
    import com.nimbusds.jose.Payload;
    import com.nimbusds.jose.crypto.MACSigner;
    
    public class LocalComment
    {
    
        private static Logger logger = Logger.getLogger("appender1");
        private static String DUOSHUO_SECRET = "你的DUOSHUO_SECRET </span>";
    
        /**
         * 
         * @param shortname
         *            站点在多说的二级域名
         * @param userkey
         *            本地用户的id
         * @param showame
         *            显示昵称
         * @return
         */
        public static String dojwt(String userkey, String showame)
        {
    
            JSONObject userInfo = new JSONObject();
    
            userInfo.put("short_name", "vtars");// 必须项
            userInfo.put("user_key", userkey);// 必须项
            userInfo.put("name", showame);// 可选项
            Payload payload = new Payload(userInfo);
    
            JWSHeader header = new JWSHeader(JWSAlgorithm.HS256);
            header.setContentType("jwt");
    
            // Create JWS object
            JWSObject jwsObject = new JWSObject(header, payload);
    
            // Create HMAC signer
            JWSSigner signer = new MACSigner(DUOSHUO_SECRET.getBytes());
            try
            {
                jwsObject.sign(signer);
    
            } catch (JOSEException e)
            {
                logger.error("Couldn't sign JWS object: " + e.getMessage());
                return null;
            }
            // Serialise JWS object to compact format
            String token = jwsObject.serialize();
    
            return token;
            // 示例输出结果为eyJhbGciOiJIUzI1NiIsImN0eSI6Imp3dCJ9.eyJ1c2VyX2tleSI6IjEiLCJuYW1lIjoi572R56uZ55So5oi3QSIsInNob3J0X25hbWUiOiJ0ZXN0In0.NXKDXwXThzFkyfl_k_-p6mfM5cpOFppvfdIjrjEq14I
        }
    }
    
    以上代码源自多说

  • 2.将a以duoshuo_token的值的方式设置到cookie

  • /**
                 * 设置多说评论登录cookie 过期时间2天
                 */
                Cookie duoshuoCookie = new Cookie("duoshuo_token",
                        LocalComment.dojwt(username, username));
                duoshuoCookie.setMaxAge(60 * 60 * 24 * 2);
                duoshuoCookie.setPath(request.getContextPath());
                response.addCookie(duoshuoCookie);


    3.评论框加载时会读取duoshuo_token 并解析出用户信息,当用户评论的时候就就会以本地用户的信息评论




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值