zoukankan      html  css  js  c++  java
  • 小程序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);
        }
    }
    ---栖息之鹰(一个外表懒洋洋的内心有激情的程序员) 此博客为笔者原著,转载时请注明出处,谢谢!
  • 相关阅读:
    servlet中doGet()和doPost()的用法
    mybatis动态SQL中的sql片段
    动态SQL语句
    Mybaits的中的对象映射(包含仅有基本数据类型的属性的和对象类型的属性的)
    <img src = "..."/>的一个图片上面怎么在放上字
    启动tomcat时出现The specified JRE installation does not exist 如何解决?
    Navicat图形更改表结构的时,设置外键时出现1452错误
    数据库主键和外键
    数据库设计的过程中的设置外键的作用
    Hibernate 事务管理
  • 原文地址:https://www.cnblogs.com/roostinghawk/p/14704947.html
Copyright © 2011-2022 走看看