版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37933685/article/details/82561258
个人博客:https://suveng.github.io/blog/
Apache Shiro是一个强大而灵活的开源安全框架,它能够干净利落地处理身份认证,授权,企业会话管理和加密
Shiro的4大部分——身份验证,授权,会话管理和加密
注:Authentication Strategy (org.apache.shiro.authc.pam.AuthenticationStrategy) 如果存在多个realm,则接口AuthenticationStrategy会确定什么样算是登录成功(例如,如果一个Realm成功,而其他的均失败,是否登录成功?)。
Jar包名称 | 版本 |
---|---|
核心包shiro-core | 1.2.0 |
Web相关包shiro-web | 1.2.0 |
缓存包shiro-ehcache | 1.2.0 |
与spring整合包shiro-spring | 1.2.0 |
Ehcache缓存核心包ehcache-core | 2.5.3 |
Shiro自身日志包slf4j-jdk14 | 1.6.4 |
1536491038635
securityManager:这个属性是必须的。 loginUrl :没有登录的用户请求需要登录的页面时自动跳转到登录页面,不是必须的属性,不输入地址的话会自动寻找项目web项目的根目录下的”/login.jsp”页面。 successUrl :登录成功默认跳转页面,不配置则跳转至”/”。如果登陆前点击的一个需要登录的页面,则在登录自动跳转到那个需要登录的页面。不跳转到此。 unauthorizedUrl :没有权限默认跳转的页面。 过滤器简称 对应的java类 anon org.apache.shiro.web.filter.authc.AnonymousFilter authc org.apache.shiro.web.filter.authc.FormAuthenticationFilter authcBasic org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter perms org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter port org.apache.shiro.web.filter.authz.PortFilter rest org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter roles org.apache.shiro.web.filter.authz.RolesAuthorizationFilter ssl org.apache.shiro.web.filter.authz.SslFilter user org.apache.shiro.web.filter.authc.UserFilter logout org.apache.shiro.web.filter.authc.LogoutFilter
注:anon,authcBasic,auchc,user是认证过滤器, perms,roles,ssl,rest,port是授权过滤器
@RequiresAuthentication:验证用户是否登录,等同于方法subject.isAuthenticated() 结果为true时。 @ RequiresUser:验证用户是否被记忆,user有两种含义:一种是成功登录的(subject.isAuthenticated() 结果为true);另外一种是被记忆的( subject.isRemembered()结果为true)。 @ RequiresGuest:验证是否是一个guest的请求,与@ RequiresUser完全相反。换言之,RequiresUser == ! RequiresGuest 。此时subject.getPrincipal() 结果为null. @ RequiresRoles:例如: @RequiresRoles("aRoleName"); void someMethod(); 如果subject中有aRoleName角色才可以访问方法someMethod。如果没有这个权限则会抛出异常AuthorizationException。 @RequiresPermissions:例如: @RequiresPermissions( {"file:read", "write:aFile.txt"} ) void someMethod(); 要求subject中必须同时含有file:read和write:aFile.txt的权限才能执行方法someMethod()。否则抛出异常AuthorizationException。