• 小程序H5的自动登录(后台Shiro)


    场景:公司开发小程序,除了正常页面访问小程序后台之外,还有一些H5页面访问另外一个系统的后台,而且不用客户再次登录

    思路:H5页面跳转时,传递客户唯一标示(两个系统需要一致),以及验证用的token(可加密生成,或者固定字符串-不太安全)

    实现:小程序端试用webview,不再多说,以下是后台shiro的实现机制(核心在CredentialsMatcher的重写)

    1. 在realm实现中设定自定义的Matcher

     @PostConstruct
        public void initCredentialsMatcher() {
            AutoLoginMatcher matcher = new AutoLoginMatcher(); // 定义在2中
            matcher.setHashAlgorithmName(SystemService.HASH_ALGORITHM);
            matcher.setHashIterations(ShaUtils.HASH_INTERATIONS);
            setCredentialsMatcher(matcher);
        }

    2. Matcher的重写

    /**
     * 登录密码比较器(重写主要用于自动登录的情况)
     * @author liuwei
     * @date 2021/1/30
     */
    public class AutoLoginMatcher extends HashedCredentialsMatcher {
    
    
        @Override
        public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
            UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;
            String autoLoginToken = usernamePasswordToken.getAutoLoginToken();
            // 如果是自动登录
            if(StringUtil.isNotEmpty(autoLoginToken)){
                // 验证token有效性(有效则直接返回true,不再需要比较密码
                try {
                    if(InterfaceUtil.auth(InterfaceConstants.interfaceAccessSwitchOn, InterfaceConstants.interfaceGoRoundValidationOn, "study_login",
                            InterfaceConstants.appKey,usernamePasswordToken.getRequestId(),autoLoginToken)){
                        return true;
                    }
                } catch (Exception e){
                    throw new RuntimeException("接口请求认证失败,请确认签名是否正确!");
                }
    
            }
    
            //不是免密登录,调用父类的方法
            return super.doCredentialsMatch(usernamePasswordToken, info);
        }
    }
    ---栖息之鹰(一个外表懒洋洋的内心有激情的程序员) 此博客为笔者原著,转载时请注明出处,谢谢!
  • 相关阅读:
    学习笔记-JMeter 操作 Mysql
    学习笔记-JMeter 关联
    学习笔记-JMeter参数化
    研究 Table DOM对象的属性和方法
    tornado web.py Application类源码剖析
    根据 HTTP header 收集客户端相关信息
    【指针】基于双向链表的list
    【指针】基于单向链表的list(待改进)
    【递归】汉诺塔
    【递归】全排列
  • 原文地址:https://www.cnblogs.com/roostinghawk/p/14704947.html
Copyright © 2020-2023  润新知