业务功能开发-登录(三)

登录cookie(加密+解密)

加密登录cookie:

密码验证成功时候会生成加密用户标识写入cookie中,根据登录页面中的是否自动登录,确定cookie的有效生命周期是-1还是初始化文件中配置的有效时间。在init.properties有cookie的有效时间配置,默认配置是15天

首先就是确定cookie的声明周期,并根据用户登录的当前时间,用户ID,用户IP,User-Agent拼接成一串标识,然后使用IDEA加密方式,生成一串登录的密文写入cookie,这个加密过程是可逆的,可以根据加密密钥进行解密。

在init.properties有密钥的配置,这个密钥可以更换,但是在项目上线之后就不要随意更换了,如果有用户选择了自动登录,那么解密就会失败,这样就需要做验证失败重新登录的处理

在ToolIDEA.java中main方法有生成示例

public static void main() throws Exception {
        String inputStr = "IDEA";
        byte[] inputData = inputStr.getBytes();
        System.err.println("原文:\t" + inputStr);

        // 初始化密钥
        byte[] key = initKey();
        System.err.println("密钥:\t" + Base64.encodeBase64String(key));

        // 加密
        inputData = encrypt(inputData, key);
        System.err.println("加密后:\t" + Base64.encodeBase64String(inputData));

        // 解密
        byte[] outputData = decrypt(inputData, key);

        String outputStr = new String(outputData);
        System.err.println("解密后:\t" + outputStr);
    }

 

为了保证线上产品的安全,大家在自己的项目中最好是自己重新生成一遍,把输出的密钥替换为config,sercurityKey现有的密钥

AuthInterceptor中加密登录用户信息并写入cookie的setCurrentUser方法,大家可以根据注释的步骤来消化代码

public static void setCurrentUser(HttpServletRequest request, HttpServletResponse response, User user, boolean autoLogin) {
        // 1.设置cookie有效时间
        int maxAgeTemp = -1;
        if (autoLogin) {
            maxAgeTemp = PropKit.getInt(ConstantInit.config_maxAge_key);
        }

        // 2.设置用户名到cookie
        ToolWeb.addCookie(response, "", "/", true, "userName", user.getStr("username"), maxAgeTemp);

        // 3.生成登陆认证cookie
        String userIds = user.getPKValue();
        String ips = ToolWeb.getIpAddr(request);
        String userAgent = request.getHeader("User-Agent");
        long date = ToolDateTime.getDateByTime();
        
        StringBuilder token = new StringBuilder();// 时间戳.#.USERID.#.USER_IP.#.USER_AGENT.#.autoLogin
        token.append(date).append(".#.").append(userIds).append(".#.").append(ips).append(".#.").append(userAgent).append(".#.").append(autoLogin);
        String authmark = ToolIDEA.encrypt(token.toString());
        
        // 4. 添加到Cookie
        ToolWeb.addCookie(response,  "", "/", true, ConstantWebContext.cookie_authmark, authmark, maxAgeTemp);
    }

 

posted @ 2016-04-27 14:48  景行彼高松  阅读(188)  评论(0编辑  收藏  举报