权限认证与授权(Shrio框架)

更新时间:2023-05-16 09:18:49 阅读: 评论:0

权限认证与授权(Shrio框架)
权限概述
认证: 系统提供的⽤于识别⽤户⾝份的功能, 通常登录功能就是认证功能; -- 让系统知道你是谁
授权: 系统授予⽤户可以访问哪些功能的证书. -- 让系统知道你能做什么!
常见的权限控制⽅式
URL 拦截权限控制
底层基于拦截器或过滤器实现
⽅法注解权限控制
我们框架会将加⼊注解的Action创建代理对象,由代理对象进⾏权限校验,如果校验通过,通过反射调⽤⽬标对象的⽅法,如果校验不通过,框架会抛出权限不⾜异常;
底层基于代理技术实现,为 Action 创建代理对象,由代理对象进⾏权限校验;
创建权限数据模型
权限表
⾓⾊表(权限的集合), 引⼊⾓⾊表,是为了⽅便授权
⽤户表
⾓⾊权限关系表
⽤户⾓⾊关系表
apache shiro 框架
核⼼功能
⾝份认证(Authentication): 简称"登录";
授权(Authorization):给⽤户分配⾓⾊或者权限资源;
会话管理(Session Management)素颜霜
加密
shiro 框架认证流程
1. 使⽤shiro框架的URL拦截进⾏权限控制(基于过滤器技术实现)
1.1 导⼊jar包: shiro-all;
1.2 在l中配置⼀个由spring提供的过滤器,⽤于整合shiro框架(这个过滤器必须放在struts2 过滤器前)
<!-- 配置spring 框架提供的⽤于整合shiro框架的过滤器 -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
智商情商
1.3 在spring配置⽂件中配置bean,id和上⾯的过滤器名称⼀致
<!-- 配置shiro框架的过滤器⼯⼚对象 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- 注⼊安全管理器对象 -->
<property name="curityManager" ref="curityManager"></property>
<!-- 注⼊相关页⾯,访问URL -->
<property name="loginUrl" value="/login.jsp"/>
<property name="successUrl" value="/index.jsp"/>
<property name="unauthorizedUrl" value="/unauthorized.jsp"/>
<!-- 注⼊URL拦截规则 -->
<property name="filterChainDefinitions">
<value>
/css/** = anon
/js/** = anon
/images/** = anon
/validatecode.jsp* = anon
/login.jsp = anon
/urAction_login.action = anon
/page_ba_staff.action = perms["staff-list"]
/* = authc
</value>
</property>
</bean>
<!-- 注册安全管理器对象 -->
<bean id="curityManager" class="org.apache.DefaultWebSecurityManager">    <property name="realm" ref="bosRealm"></property>
</bean>
<!-- 注册 realm -->
<bean id="bosRealm" class="cn.alm.BOSRealm"></bean>
1.4 修改 UrAction 中的login⽅法,使⽤shiro框架提供的⽅式进⾏认证操作// UrAction.java
public class UrAction extends BaAction<Ur>{
// 属性驱动,接收页⾯输⼊的验证码
private String checkcode;豪车标志大全
public void tCheckcode(String checkcode){
this.checkcode = checkcode;
}
// 使⽤shiro框架提供的⽅式,进⾏认证操作
public String login(){
// 从Session中获取⽣成的验证码
String validatecode =
(Request().getSession().getAttribute("key");
//校验验证码是否正确
if(StringUtils.isNotBlank(checkcode) && checkcode.equals(validatecode)){
/
万象更新的拼音
/ 使⽤shiro框架提供的⽅式进⾏认证操作
Subject subject = Subject(); // 获取当前⽤户对象
// 创建⽤户名,密码令牌对象
AuthenticationToken token = new Urname(),
MD5Utils.Password()));
try{
subject.login(token);
}catch(Exception e){
e.printStackTrace();
return LOGIN;
}
/
/ 登录成功,将ur从当前线程中取出,放⼊ssion中
Ur ur = (Principal();
return HOME;
}el{
// 输⼊的验证码错误,设置提⽰信息,跳转到登录页⾯
船钓this.addActionError("输⼊的验证码错误!");
return LOGIN;
}
}
}
/
/ ⾃定义realm类, BOSRealm.java
public class BOSRealm extends AuthorizingRealm{
@Autowired
private IUrDao urDao;
// 认证⽅法
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token)
throws AuthenticationException {
UrnamePasswordToken passwordToken = (UrnamePasswordToken)token;
// 获取页⾯输⼊的⽤户名
String urname = Urname();
寻雍尊师隐居// 根据⽤户名查询数据库中的密码
Ur ur = urDao.findUrByUrname(urname);
if(ur == null){
// 如果页⾯输⼊的⽤户名不存在
return null;
}
// 创建简单认证对象
AuthenticationInfo info = new SimpleAuthenticationInfo(Password(),
// shiro框架负责⽐对数据库中的密码和页⾯输⼊的密码是否⼀致
return info;
}
/
/ 授权⽅法
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
// 为⽤户授权
info.addStringPermission("staff-list");
// 获取当前⽤户(两种⽅式)
Ur ur1 = (Subject().getPrincipal();
Ur ur2 = (PrimaryPrincipal();
// TODO 获取需要修改为根据当前登录⽤户查询数据库,获取实际对应的权限
return info;
}
}
2. 使⽤ shiro 的⽅法注解⽅式进⾏权限控制(基于代理技术实现)
2.1 在spring配置⽂件中开启shiro注解⽀持
<!-- 开启shiro框架注解⽀持  -->
<bean id="defaultAdvisorAutoProxyCreator"
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
<!-- 强制使⽤cglib,创建Action的代理对象 -->
<property name="proxyTargetClass" value="true"/>
</bean>
<!-- 配置shiro框架提供的切⾯类,⽤于创建代理对象 -->
<bean class="org.apache.shiro.spring.curity.interceptor.AuthorizationAttributeSourceAdvisor"/>
2.2 在Action类中的⽅法上,使⽤shiro框架提供的注解,@RequiresPermissions("权限名称")
在权限不⾜时,会抛出如下异常:
2.3 在 l 中配置全局异常捕获,当shiro框架抛出权限不⾜异常时,跳转到权限不⾜提⽰页⾯<!-- 配置全局结果集 -->
<global-results>
<result name="unauthorized">/unauthorized.jsp</result>
</global-results>
<!-- 配置全局异常处理 -->
<global-exception-mappings>
<exception-mapping result="unauthorized"
exception="org.apache.shiro.authz.UnauthorizedException"/>
</global-exception-mappings>
3. 使⽤shiro提供的页⾯标签⽅式进⾏权限控制
3.1 在jsp页⾯中,引⼊shiro的标签库:
<%@ taglib prefix="shiro" uri="/tags"%>
3.2 使⽤shiro的标签控制页⾯元素的展⽰
<shiro:hasPermission name="权限名称">
<!-- 页⾯中需要权限控制的元素 -->
<input type="button" value="test"/>
</shiro:hasPermission>
使⽤ ehcache 缓存权限数据
1. 导⼊jar包: sf.ehcache
2. 在项⽬中提供 ehcache 的配置⽂件
怎么剥皮皮虾<ehcache xmlns:xsi="/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<diskStore path="pdir"/>
<defaultCache
maxElementsInMemory="10000"
短路故障
eternal="fal"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="fal"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
</ehcache>
3. 在spring配置⽂件中配置缓存管理器对象,并注⼊给安全管理器对象
// l
<!-- 注册安全管理器对象 -->
<bean id="curityManager" class="org.apache.DefaultWebSecurityManager">    <property name="realm" ref="bosRealm"></property>
<!-- 注⼊缓存管理器 -->
<property name="cacheManager" ref="cacheManager"></property>
</bean>
<!-- 注⼊缓存管理器 -->
<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
<!-- 注⼊ ehcache 的配置⽂件 -->
<property name="cacheManagerConfigFile" value="l"></property> </bean>

本文发布于:2023-05-16 09:18:49,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/903161.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:权限   框架   对象
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图