zoukankan      html  css  js  c++  java
  • Shiro的一些点

     Shiro再次学习

    权限:
            <!--  
              配置哪些页面需要受保护.
              以及访问这些页面需要的权限.
              1). anon 可以被匿名访问
              2). authc 必须认证(即登录)后才可能访问的页面.
              3). logout 登出.
              4). roles 角色过滤器
            -->
    示例:
            <property name="filterChainDefinitions">
                <value>
                    /login.jsp = anon
                    /shiro/login = anon
                    /shiro/logout = logout
                    
                    /user.jsp = roles[user]
                    /admin.jsp = roles[admin]
                    
                    # everything else requires  authentication:
                    /** = authc
                </value>
            </property>
    
    authc 拦截器会判断用户是否是通过Subject.login(isAuthenticated()==true)登录的,如果是才放行,否则会跳转到登录页面叫你重新登录。 

    权限补充:

    获取当前用户信息:

    //获取用户信息
    Subject currentUser = SecurityUtils.getSubject();
    //isAuthenticated(验证)方法返回一个布尔值,验证用户是否通过
    currentUser.isAuthenticated()
    // 把用户名和密码封装为 UsernamePasswordToken 对象
    UsernamePasswordToken token = new  UsernamePasswordToken(username, password);
    //setRememberMe方法是 记住我 功能
    token.setRememberMe(true);
    

      

    认证:

    工号ShiroRealm extends AuthenticatingRealm         
    AuthenticatingRealm 用于认证
    
    密码的比对:
    通过AuthenticatingRealm 的 credentialsMatcher 进行比对
    
    使用new SimpleHashs(String algoriTime(加密算法名称),Object source(用户名(加密后)),Object salt(盐值),int hashIterations)
    //一般盐值的取值方法
    BtyeSource Salt= BtyeSource.Util.bytes(username);
    //返回对象
    方法返回值 AuthenticationInfo  
    最后的对象  new SimpleAuthenticationInfo
    

      

    授权:

    标签:

    //shiro:guest  --  用户没有验证时显示的数据,游客显示内容
    <shiro:guest>
        欢迎游客,<a href="login.jsp">登录</a>
    </shiro:guest>
    
    //shiro:user     --   用户已经经过认证/记住我(setRememberMe)登录后显示的信息。
    <shiro:user>
        欢迎[<shiro:principal>] 登录, <a href = "logout">退出</a>
    </shiro:user>
    
    //shiro:authenticated  --  用户已经通过身份验证,Subject.login登陆成功,不是记住登录。
    <shiro:authenticated>
        用户[<shiro:principal>] 身份已经验证。
    </shiro:authenticated>
    
    //shiro:notAuthenticated  --  用户未经过身份验证,没有调用Subject.login方法。(记住我功能,属于未验证身份)
    <shiro:notAuthenticated>
         未验证身份(包括记住我)
    </shiro:notAuthenticated>
    
    //显示用户信息
    <shiro:principal property = "username"/>
    
    //shiro:hasRole  --  角色认证,对登录用户的角色,进行内容显示
    <shiro:hasRole name = "admin">
        用户[<shiro:principal>]用户角色admin<br/>
    </shiro:hasRole>
    
    //角色认证  扩充
    <shiro:hasAnyRole name = "admin,user">
            用户[<shiro:principal/>] 拥有角色 admin、user权限<br/>
    </shiro:hasAnyRole>
    
    //角色显示扩充
    <shiro:lackRole name = "admin">
            该用户【<shiro:principal/>】没有角色
    </shiro:lackRole>
    
    //当前Subjest(登录用户) 没有权限将显示body内容
    <shiro:lacksPermission name = "user:creat">
            用户[<shiro:principal/>]没有权限user:creat。。
    </shiro:lacksPermission>
    

      

    权限注解:

    //注意权限注解 不能放在Service层,事物注解和shiro注解会发生冲突
    @RequireAuthentication 表示通过Subject.login的验证
    @RequiresGuest : 表示当前用户已经经过认证 或者 通过 记住我的功能登录
    @RequiresUser  : 表示游客身份
    @RequiresRoles(value = {},logical = Logical.AND):表示当前Subject需要角色admin 和 user 的权限
    @RequiresPermissions : 表示当前需要权限 user:a 和 user:b 的权限
  • 相关阅读:
    bzoj3473 字符串
    洛谷P4070 生成魔咒
    洛谷P3975 弦论
    AT1219 歴史の研究
    课上讲的几个新的技巧
    索引与视图(转载)
    oracle中的分支与循环语句
    Oracle to_date()函数的用法《转载》
    自定义函数的存储过程的区别
    UNION 和 UNION ALL 操作符
  • 原文地址:https://www.cnblogs.com/money131/p/13338414.html
Copyright © 2011-2022 走看看