zoukankan      html  css  js  c++  java
  • 业务功能开发-登录(三)

    登录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("原文:	" + inputStr);
    
            // 初始化密钥
            byte[] key = initKey();
            System.err.println("密钥:	" + Base64.encodeBase64String(key));
    
            // 加密
            inputData = encrypt(inputData, key);
            System.err.println("加密后:	" + Base64.encodeBase64String(inputData));
    
            // 解密
            byte[] outputData = decrypt(inputData, key);
    
            String outputStr = new String(outputData);
            System.err.println("解密后:	" + 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);
        }
  • 相关阅读:
    音律入门
    [转]MIDI常识20条
    Java使用代理服务器
    java8日期时间
    误删课表系统
    Uncaught Error: Bootstrap tooltips require Tether (http://github.hubspot.com/tether/)
    SpringBoot应用部署[转]
    如何学习新技术
    Maven使用archetype迅速生成项目骨架
    两个月打工总结
  • 原文地址:https://www.cnblogs.com/tongx123/p/5438851.html
Copyright © 2011-2022 走看看