Apache shiro权限基本使用
l shiro框架的核心功能:认证、授权、会话管理、加密

Application Code:应用程序代码,由开发人员负责开发的
Subject:框架提供的接口,代表当前用户对象
SecurityManager:框架提供的接口,代表安全管理器对象
Realm:可以开发人员编写,框架也提供一些,类似于DAO,用于访问权限数据
一 、在pom中引入相关依赖
1 <!-- 引入shiro框架的依赖 -->
2 <dependency>
3 <groupId>org.apache.shiro</groupId>
4 <artifactId>shiro-all</artifactId>
5 <version>1.2.2</version>
6 </dependency>
二、在web.xml中配置spring框架提供的用于整合shiro框架的过滤器
<!-- 配置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>
三、在spring配置文件中配置bean,id为shiroFilter
1 <!-- 配置shiro框架过滤器工厂对象 -->
2 <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
3 <!-- 注入安全管理器对象 -->
4 <property name="securityManager" ref="securityManager"></property>
5 <!-- 注入相关页面的url -->
6 <property name="loginUrl" value="/login.jsp"></property>
7 <property name="successUrl" value="/index.jsp"></property>
8 <property name="unauthorizedUrl" value="/unauthorized.jsp"></property>
9 <!-- 注入url拦截规整 -->
10 <property name="filterChainDefinitions">
11 <value>
12 /css/** anon
13 /js/** = anon
14 /images/** = anon
15 /validatecode.jsp* = anon
16 /login.jsp = anon
17 /userAction_login.action = anon
18 /page_base_staff.action = perms["staff-list"]
19 /* = authc
20 </value>
21 </property>
22 </bean>
1 <!-- 注册安全管理器对象 -->
2 <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
3 <property name="realm" ref="borRealm"></property>
4 <!-- 注入缓存管理器 -->
5 <property name="cacheManager" ref="ehCacheManager"></property>
6 </bean>
<!-- 注册realm -->
<bean id="borRealm" class="com.itheima.bos.realm.BOSRealm"></bean>
1 <!-- 开启shrio框架注解支持 -->
2 <bean id="defaultAdvisorAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
3 <!-- 强制使用cglib代理,为Action对象创建代理对象 -->
4 <property name="proxyTargetClass" value="true"></property>
5 </bean>
6 <!-- 配置shrio框架提供的切面类,用于创建代理对象 -->
7 <bean id="" class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"/>
1 <!-- 注册缓存管理器 -->
2 <bean id="ehCacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
3 <property name="cacheManagerConfigFile" value="classpath:ehcache.xml"></property>
4 </bean>
四、修改login方法
1 public String login() {
2 //校验验证码是否通过
3 HttpSession session = ServletActionContext.getRequest().getSession();
4 String key = (String) session.getAttribute("key");
5 if(StringUtils.equals(checkcode, key)) {
6 //使用shrio框架提供的方式进行验证
7 Subject subject = SecurityUtils.getSubject();//获得当前用户对象,状态为 未认证
8 AuthenticationToken token = new UsernamePasswordToken(model.getUsername(),MD5Utils.md5(model.getPassword()));//创建用户名和密码令牌对象
9 try {
10 subject.login(token);
11 } catch (Exception e) {
12 e.printStackTrace();
13 return LOGIN;
14 }
15 User user = (User) subject.getPrincipal();
16 session.setAttribute("loginUser", user);
17 return HOME;
18 }else {
19 //验证码错误
20 this.addActionError("输入验证码错误");
21 return LOGIN;
22 }
23 }
五、自定义realm,并注入给安全管理器
1 public class BOSRealm extends AuthorizingRealm {
2 @Autowired
3 private UserDao userDao;
4 @Autowired
5 private FunctionDao functionDao;
6
7 //认证
8 @Override
9 protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
10 System.out.println("自定义的认证方法执行了");
11 UsernamePasswordToken passwordToken = (UsernamePasswordToken) token;
12 //获得页面输入的用户名
13 String username = passwordToken.getUsername();
14 //根据用户名密码查询数据库中的密码
15 User user = userDao.findUserByUsername(username);
16 if(user == null) {
17 //页面输入的用户名不存在
18 return null;
19 }
20 //简单认证信息对象
21 AuthenticationInfo info = new SimpleAuthenticationInfo(user,user.getPassword(),this.getName());
22 return info;
23 }
24 //授权
25 @Override
26 protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
27 SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
28 //为用户授权
29 //info.addStringPermission("staff-list");
30 //根据当前登录用户查询数据库,获取实际对应的权限
31 User user = (User) SecurityUtils.getSubject().getPrincipal();//获取当前登录用户对象
32 //User user2 = (User) principalCollection.getPrimaryPrincipal();
33 List<Function> list = null;
34 if(user.getUsername().equals("admin")) {
35 DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Function.class);
36 list = functionDao.findByCriteria(detachedCriteria );
37 }else {
38 list = functionDao.findFunctionListByUserId(user.getId());
39 }
40 for(Function function : list) {
41 info.addStringPermission(function.getCode());
42 }
43 return info;
44 }
45 }
六、在方法上使用注解
1 //批量删除
2 @RequiresPermissions("staff-delete")//执行这个方法,需要staff-delete权限
3 public String deleteBatch() {
4 staffService.deleteBatch(ids);
5 return LIST;
6 }
Apache shiro权限基本使用的更多相关文章
- Apache Shiro权限框架在SpringMVC+Hibernate中的应用
在做网站开发中,用户权限必须要考虑的,权限这个东西很重要,它规定了用户在使用中能进行哪 些操作,和不能进行哪些操作:我们完全可以使用过滤器来进行权限的操作,但是有了权限框架之后,使用起来会非常的方便, ...
- SpringBoot整合Apache Shiro权限验证框架
比较常见的权限框架有两种,一种是Spring Security,另一种是Apache Shiro,两种框架各有优劣,个人感觉Shiro更容易使用,更加灵活,也更符合RABC规则,而且是java官方更推 ...
- Apache Shiro 权限框架
分享一个视屏教程集合 http://www.tudou.com/home/konghao/item 1.Shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码 ...
- SpringBoot + Apache Shiro权限管理
之前配置过Spring + SpringMVC + JPA + Shiro后台权限管理 + VUE前台登录页面的框架,手动配置各种.xml,比较繁琐,前几天写了个SpringBootShiro的Dem ...
- 关于Apache Shiro权限框架的一些使用误区的解释
多了不说了,进入正题,shiro是个权限框架提供权限管理等功能,网上的教程一般都是互相抄,比如<shiro:principal property="xxx"/>这个标签 ...
- Apache Shiro和Spring Security的详细对比
参考资料: 1)Apache Shiro Apache Shiro:http://shiro.apache.org/ 在Web项目中应用 Apache Shiro:http://www.ibm.com ...
- 快速搭建Spring Boot + Apache Shiro 环境
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.Apache Shiro 介绍及概念 概念:Apache Shiro是一个强大且易用的Java安全框 ...
- Apache Shiro 开源权限框架
在 Web 项目中应用 Apache Shiro 开源权限框架 Apache Shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证.授权.加密.会话管理等功能.认证和授权为权限控制的核心, ...
- 将 Shiro 作为应用的权限基础 五:SpringMVC+Apache Shiro+JPA(hibernate)整合配置
配置web.xml,applicationContext.xml, spring-mvc.xml,applicationContext-shiro.xml,而且都有详细的说明. Web.xml是web ...
随机推荐
- 4GL之Non-SCROLLING CURSOR
在4gl中CURSOR可以说是每一个程序中都会有的,而CURSOR又分为三种SCROLLING CURSOR.Non-SCROLLING CURSOR.LOCKING CURSOR. Non-SCRO ...
- Orleans 知多少 | Orleans 中文文档上线
Orleans 简介 Orleans是一个跨平台框架,用于构建健壮,可扩展的分布式应用程序 Orleans建立在.NET开发人员生产力的基础上,并将其带入了分布式应用程序的世界,例如云服务. Orle ...
- 把Autofac玩的和javaSpring一样6
大家好,今天来介绍我开源的一个autofac.Annotation项目 源码:https://github.com/yuzd/Autofac.Annotation 本项目是autofa的一个扩展组件, ...
- 记得设置docker日志文件大小!!!!!
# vim /etc/docker/daemon.json { "log-driver":"json-file", "log-opts": ...
- js判断传递参数的的类型,并返回
function type(target) { var templet ={ "[object Array]" : "arry"; "[obj ...
- zstd和zip操作6g的文本
ssd是在固态硬盘上的时间 1.txt 7038308223 bytes 都是默认级别 ======================================== zstd-v1.4.4-w ...
- leetcode刷题-56合并区间
题目 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]] 思路 通过设置一个移 ...
- 乔悟空-CTF-i春秋-Web-Backdoor
2020.09.05 每次遇到不会的,想两分钟就放弃了,直接奔wp,一看wp发现,wc,就这?我怎么没想到--心里想着下道题一定自己想,不看wp,然后周而复始
- Hadoop框架:单服务下伪分布式集群搭建
本文源码:GitHub·点这里 || GitEE·点这里 一.基础环境 1.环境版本 环境:centos7 hadoop版本:2.7.2 jdk版本:1.8 2.Hadoop目录结构 bin目录:存放 ...
- 阿里云docker部署mysql
看完我的上一个博客之后,对centos系统应该有一定的了解,话不多说,接下来我们来在docker容器中部署mysql. 1.下载mysql镜像,因为本人用的5.7版本,你也可以下载最新版,都是可以的 ...