erp-重难点-权限管理-3

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/billycoder/article/details/88597926

shiro自定义realm完成认证,实现对动态资源访问控制

权限管理6大步

菜单可见和不可见:
1、不同角色看不同菜单的,表设计思路
2、不同角色看不同菜单的,表修改思路
资源可访问和不可访问:
3、shiro,登录后才能访问特定资源
4、shiro,登录后不同角色可以访问不同资源
5、shiro,登录后不同角色可以访问同一个资源里面的不同方法
6、shiro,登录后不同角色可以访问同一个资源同一个方法的不同部分
##回顾
前面主要介绍不同角色针对管理系统菜单查看的权限(菜单可见和不可见),以及修改权限。

这节,主要介绍不同角色针对管理系统资源访问的权限(资源可访问和不可访问)。资源分静态资源和动态资源。静态资源指css、js、html等。动态资源指某一个servlet、action、Controller。

出现的问题

前面我们可以控制某些菜单对某些角色不可见,但是没有控制直接访问资源的情况,甚至无需登录就可以直接访问系统资源。比如:

当然,我们可以在任何操作之前,要求用户先登录,但有些繁琐。用shiro可以很容易控制。

需求

只有登录,才能访问所有的动态资源。直接访问动态资源,应该提示登录。
效果图

访问前要登录.gif

实现步骤

1. 配置pom.xml

2. 配置web.xml

注意需要添加到structs过滤器之前。

扫描二维码关注公众号,回复: 5639782 查看本文章

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权限认证与授权

猜你喜欢

转载自blog.csdn.net/billycoder/article/details/88597926