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 的权限

 

posted @ 2020-07-19 01:47  Money131  阅读(176)  评论(0编辑  收藏  举报