shiro自定义realm完成认证,实现对动态资源访问控制
权限管理6大步
菜单可见和不可见:
1、不同角色看不同菜单的,表设计思路;
2、不同角色看不同菜单的,表修改思路;
资源可访问和不可访问:
3、shiro,登录后才能访问特定资源;
4、shiro,登录后不同角色可以访问不同资源;
5、shiro,登录后不同角色可以访问同一个资源里面的不同方法;
6、shiro,登录后不同角色可以访问同一个资源同一个方法的不同部分;
##回顾
前面主要介绍不同角色针对管理系统菜单查看的权限(菜单可见和不可见),以及修改权限。
这节,主要介绍不同角色针对管理系统资源访问的权限(资源可访问和不可访问)。资源分静态资源和动态资源。静态资源指css、js、html等。动态资源指某一个servlet、action、Controller。
出现的问题
前面我们可以控制某些菜单对某些角色不可见,但是没有控制直接访问资源的情况,甚至无需登录就可以直接访问系统资源。比如:
当然,我们可以在任何操作之前,要求用户先登录,但有些繁琐。用shiro可以很容易控制。
需求
只有登录,才能访问所有的动态资源。直接访问动态资源,应该提示登录。
效果图
实现步骤
1. 配置pom.xml
2. 配置web.xml
注意需要添加到structs过滤器之前。
3. 配置applicationContext_shiro.xml
4. 编写认证核心代码,没有自定realms。
这个username、pwd是否正确。shiro现在是无法知道的。所以需要配置realms,不然会出现如下错误:
5. 自定realms
完善applicationContext_shiro.xml配置
6. 断点看执行流程
前端点登陆按钮,来到控制层
然后到自定义Realm里面去
回到控制层,通知前端,登陆成功
shiro面试常见问题
1. shiro可以做什么?
认证、授权、会话管理、加密。
2. 怎么理解shiro认证和授权?
认证:拿到登机牌,能上飞机。
授权:坐头等舱还是普通舱。
3. shiro的内置过滤器能记住几个?
过滤器 | 类型 | 过滤器对应的类 | 描述 |
---|---|---|---|
anon | 认证 | AnonymousFilter | 随意访问 |
authc | 认证 | FormAuthenticationFilter | 认证后访问 |
authcBasic | 认证 | BasicHttpAuthenticationFilter | |
perms | 授权 | PermissionsAuthorizationFilter | 指定角色 |
port | 授权 | PortFilter | 指定端口 |
rest | 授权 | HttpMethodPermissionFilter | 指定方法 |
roles | 授权 | RolesAuthorizationFilter | 指定角色 |
ssl | 授权 | SslFilter | https |
user | 授权 | UserFilter |
4. 项目中用过哪些过滤器?
anon: /admins/=anon 没有参数,表示可以匿名使用
authc: /admins/user/=authc 没有参数,表示登录后访问
perms: /admins/user/*=perms[“权限名称”],参数可以写多个,多个之间用逗号,不同角色访问
5. 怎么理解shiroUrl的匹配规则的第一符合原则?
会先后覆盖,实际存储结构是map
6. Shiro的三大核心组件:
Subject:正与系统进行交互的人,或某一个第三方服务。所有Subject实例都被绑定到(且这是必须的)一个SecurityManager上。
SecurityManager:Shiro架构的心脏,典型的Facade模式。用来协调内部各安全组件,管理内部组件实例,并通过它来提供安全管理的各种服务。当Shiro与一个Subject进行交互时,实质上是幕后的SecurityManager处理所有繁重的Subject安全操作。
Realms:本质上是一个特定安全的DAO。当配置Shiro时,必须指定至少一个Realm用来进行身份验证和/或授权。Shiro提供了多种可用的Realms来获取安全相关的数据。如关系数据库(JDBC),INI及属性文件等。可以定义自己Realm实现来代表自定义的数据源。
7. shiro认证的流程
(1)创建token令牌,token中有用户提交的认证信息即账号和密码
(2)执行subject.login(token),最终由securityManager通过Authenticator进行认证
(3)Authenticator的实现ModularRealmAuthenticator调用realm从数据库中取用户真实的账号和密码
(4)CustomRealm先根据token中的账号去数据库中找该账号,如果找不到则给ModularRealmAuthenticator返回null,如果找到则匹配密码,匹配密码成功则认证通过。
其他链接
Shiro系列教程URL匹配规则(AntPathMatcher)
请教一下关于过滤器,拦截器,监听器具体应用上的区别?
shiro权限认证与授权