shiro权限健康安全验证框架
来源:互联网 发布:我的世界0.15.1枪械js 编辑:程序博客网 时间:2024/05/21 23:00
shiro权限验证框架
1.什么是Shiro?
Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身份验证和授权。使用 Shiro,您就能够为您的应用程序提供安全性而又无需从头编写所有代码。
2.为什么要用Shiro?
shiro在大多数的企业级系统中,我们一般都是采用角色关联资源,然后对用户指定一些角色,这样用户就拥有了一些url,菜单等资源,登陆后页面即可相应的一些功能,但是这种情况下存在这安全问题,因为用户页面只是没有显示相应的功能菜单,若某个用户知道url地址,直接去访问,系统是没法控制该用户操作的,于是便迎来了权限验证框架这一说。
3.Shiro能够有哪些方式控制权限呢?
同样shiro有两种配置方式,xml和注解,当然xml相对而言不灵活,只能指定经过认证授权后可以访问哪些页面以及不能访问哪些页面,对于注解就灵活一些了,可以适应于各种情景,
方法上加上
@RequiresAuthentication (验证用户是否登录)
@RequiresUser 验证用户是否被记忆,user有两种含义:一种是成功登录的(subject.isAuthenticated() 结果为true);另外一种是被记忆的(subject.isRemembered()结果为true)。
@RequiresGuest 验证是否是一个guest的请求
@RequiresRoles 如果subject中有aRoleName角色才可以访问方法someMethod。如果没有这个权限则会抛出异常AuthorizationException。
@RequiresPermissions 要求subject中必须同时含有file:read和write:aFile.txt的权限才能执行方法someMethod()。否则抛出异常AuthorizationException。
@RequiresUser 验证用户是否被记忆,user有两种含义:一种是成功登录的(subject.isAuthenticated() 结果为true);另外一种是被记忆的(subject.isRemembered()结果为true)。
@RequiresGuest 验证是否是一个guest的请求
@RequiresRoles 如果subject中有aRoleName角色才可以访问方法someMethod。如果没有这个权限则会抛出异常AuthorizationException。
@RequiresPermissions 要求subject中必须同时含有file:read和write:aFile.txt的权限才能执行方法someMethod()。否则抛出异常AuthorizationException。
4.说说怎样使用Shiro?
先添加 spring-shiro.xml 配置
具体如下:
具体如下:
<span style="font-size: 18px;"><?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd" default-lazy-init="true"><bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> <property name="loginUrl" value="/shiro/turnlogin.do" /> <property name="successUrl" value="/shiro/success.do" /> <property name="unauthorizedUrl" value="/shiro/unauth.do" /> <property name="filterChainDefinitions"> <value> /shiro/success = authc <!-- authc 表示需要认证才能访问的页面 --> /shiro/success = authc, perms[/home] <!-- perms 表示需要该权限才能访问的页面 --> </value> </property></bean><bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="myShiroRealm"></property></bean><bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" /><bean id="myShiroRealm" class="com.hfmx.util.shiro.MyShiroRealm"> <!-- businessManager 用来实现用户名密码的查询 --> <span style="font-family: Arial, Helvetica, sans-serif;"><!-- </span><span style="font-family: Arial, Helvetica, sans-serif;"><property name="shiroService" ref="shiroService" /> </span><span style="font-family: Arial, Helvetica, sans-serif;">--></span><span style="font-family: Arial, Helvetica, sans-serif;"></span></bean><bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <!--登录--> <prop key="org.apache.shiro.authz.UnauthenticatedException"> redirect:/shiro/turnlogin.do </prop> <!--授权--> <prop key="org.apache.shiro.authz.UnauthorizedException"> redirect:/shiro/turnlogin.do </prop> </props> </property> <property name="defaultErrorView" value="s/403" /></bean></beans></span>
在applicationContext中引入该文件
<import resource="classpath*:/spring-shiro.xml" />
在springMVC中加入:
<!-- 开启Shiro的注解,实现对Controller的方法级权限检查(如@RequiresRoles,@RequiresPermissions),需
借助SpringAOP扫描使用Shiro注解的类,并在必要时进行安全逻辑验证 -->
<!-- 需要在 sprimg-MVC的配置文件中 -->
<span style="font-size: 18px;">
<bean id="controllerAdvisorAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
depends-on="lifecycleBeanPostProcessor"/> <bean id="controllerAuthorizationAttributeSourceAdvisor"
class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager"/> </bean>
</span>
上述这样就配置完毕了
我们要新建一个类MyShiroRealm ,继承AuthorizingRealm
重写doGetAuthorizationInfo() //获取授权信息
以及doGetAuthenticationInfo()//获取认证信息
这两个方法
因为公司系统 已经使用了一定时间了,用户登录这块已经很完善就仍然使用原来的,所以这里的doGetAuthenticationInfo方法 可以不做太多的处理,这里也把应有的流程贴出来
@Override public AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken at) throws AuthenticationException { //1. 把AuthenticationToken 转化为 UsernamePasswordToken UsernamePasswordToken token = (UsernamePasswordToken) at; //2. 从UsernamePasswordToken 中获取 username String username = token.getUsername(); char[] password = token.getPassword(); //3. 调用数据库的方法,从数据库中查询 username 对应的用户记录 //4. 若用户不存在,则可以抛出 UnknownAccountException //5. 根据用户信息的情况,决定是否需要抛出其他的AuthenticationException 异常 //6. 根据用户的情况,来构建 AuthenticationInfo 对象并返回
阅读全文
0 0
- shiro权限健康安全验证框架
- shiro权限验证框架
- 基于权限安全框架Shiro的登录验证功能实现
- 安全认证框架Shiro(三)- 源码角度解析shiro的权限验证
- shiro框架权限验证逻辑
- Apache Shiro权限验证框架
- 权限控制器——Shiro安全框架
- 安全验证框架shiro(一)
- 安全验证框架shiro(二)
- 权限验证框架Shiro学习(一)
- 权限验证框架Shiro学习(二)
- 权限验证框架Shiro使用详解
- Java权限验证框架Shiro的入门
- shiro权限与安全
- java安全框架-Shiro学习笔记(三)-权限认证
- 安全验证框架使用笔记001---Shiro简介
- shiro权限验证标签
- shiro权限验证标签
- 算法实现Java之插入排序
- java中的SPI机制
- 40个Java多线程问题总结
- Java获得指定时区时间
- Java 8 特性
- shiro权限健康安全验证框架
- Ubuntu16.04+cuda8.0+cudnn6.0+tensorflow(四)
- 快速推进国家2000坐标系的空间数据成果基于FME的坐标转换解决方案
- [莫队维护DP] LOJ#6074. 「2017 山东一轮集训 Day6」子序列
- 最长回文子串
- java 多线程 线程健康安全
- URL编码与解码原理全解析
- Nginx通过/etc/init.d/nginx方式启动或停止服务
- ipv6禁用