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