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     }

原文地址:https://www.cnblogs.com/cat-fish6/p/10053011.html

时间: 2024-10-15 03:07:18

Apache shiro权限基本使用的相关文章

Apache Shiro权限框架理论介绍

Apache Shiro权限管理框架介绍 Apache Shiro的官网地址如下: http://shiro.apache.org/ Apache Shiro是一个简单易用且强大而灵活的开源Java安全框架,以下简称Shiro.它干净利落地处理身份认证.授权以及企业会话管理和加密.Shiro拥有易于理解的API,你可以快速且容易地使用它来保护任何应用程序--从最小的移动应用程序到最大的web和企业应用程序. Shiro权限基础概念: 安全实体:就是被权限系统保护的对象,比如工资数据. 权限:就是

关于Apache Shiro权限框架的一些使用误区的解释

多了不说了,进入正题,shiro是个权限框架提供权限管理等功能,网上的教程一般都是互相抄,比如<shiro:principal property="xxx"/>这个标签,网上教程告诉你可以用来获取登录用户的任何属性,但现实中如果你这么写,并且按照开涛教程上写的登陆逻辑,肯定百分百报错,这是为什么呢?因为网上教程的登录部分一般这么写: 这是重写authorizingrealm的dogetAuthenticationinfo方法: protected Authenticatio

SpringMVC+Apache Shiro+JPA(hibernate)案例教学(二)基于SpringMVC+Shiro的用户登录权限验证

序: 在上一篇中,咱们已经对于项目已经做了基本的配置,这一篇文章开始学习Shiro如何对登录进行验证. 教学: 一.Shiro配置的简要说明. 有心人可能注意到了,在上一章的applicationContext.xml配置文件中,包含以下配置. <!-- 項目自定义的Realm --> <bean id="shiroDbRealm" class="org.shiro.demo.service.realm.ShiroDbRealm" ><

SpringMVC+Apache Shiro+JPA(hibernate)案例教学(四)基于Shiro验证用户权限,且给用户授权

最新项目比较忙,写文章的精力就相对减少了,但看到邮箱里的几个催更,还是厚颜把剩下的文档补上. 一.修改ShiroDbRealm类,实现它的doGetAuthorizationInfo方法 package org.shiro.demo.service.realm; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import org.apache.commons.lang.St

将 Shiro 作为应用的权限基础 五:SpringMVC+Apache Shiro+JPA(hib

点击链接加入群[JavaEE(SSH+IntelliJIDE+Maven)]:http://jq.qq.com/?_wv=1027&k=L2rbHv 将 Shiro 作为应用的权限基础 五:SpringMVC+Apache Shiro+JPA(hibernate)整合配置 配置web.xml,applicationContext.xml, spring-mvc.xml,applicationContext-shiro.xml,而且都有详细的说明. web.xml是web项目最基本的配置文件,看这

【Shiro】Apache Shiro架构之权限认证(Authorization)

上一篇博文总结了一下Shiro中的身份认证,本文主要来总结一下Shiro中的权限认证(Authorization)功能,即授权.如下: 本文参考自Apache Shiro的官方文档:http://shiro.apache.org/authorization.html. 本文遵循以下流程:先介绍Shiro中的权限认证,再通过一个简单的实例来具体说明一下API的使用(基于maven). 1. 权限认证的核心要素 权限认证,也就是访问控制,即在应用中控制谁能访问哪些资源.在权限认证中,最核心的三个要素

将 Shiro 作为应用的权限基础 五:SpringMVC+Apache Shiro+JPA(hibernate)整合配置

配置web.xml,applicationContext.xml, spring-mvc.xml,applicationContext-shiro.xml,而且都有详细的说明. Web.xml是web项目最基本的配置文件,看这个配置,可以快速知道web项目使用什么框架,它就像一个面板,切入我们想用的插件. applicationContext.xml是spring的基本配置,主要配置数据源.JPA实体管理器工厂.事务 spring-mvc.xml是SpringMVC的配置, applicatio

Spring Security和Apache Shiro开发企业级权限管理系统

原理回顾什么是权限管理?权限管理是系统的安全范畴,要求必须是合法的用户才可以访问系统(用户认证),且必须具有该 资源的访问权限才可以访问该 资源(授权).认证:对用户合法身份的校验,要求必须是合法的用户才可以访问系统.授权:访问控制,必须具有该 资源的访问权限才可以访问该 资源.权限模型:标准权限数据模型包括 :用户.角色.权限(包括资源和权限).用户角色关系.角色权限关系.权限分配:通过UI界面方便给用户分配权限,对上边权限模型进行增.删.改.查操作.权限控制:基于角色的权限控制:根据角色判断

Apache Shiro 使用手册(一)Shiro架构介绍

一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户"登录": 授权 - 访问控制: 密码加密 - 保护或隐藏数据防止被偷窥: 会话管理 - 每用户相关的时间敏感的状态. 对于任何一个应用程序,Shiro都可以提供全面的安全管理服务.并且相对于其他安全框架,Shiro要简单的多. 二.Shiro的架构介绍 首先,来了解一下Shiro的三个核心组件:Subject. Security