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 ...
随机推荐
- sql 游标(理论)
游标是处理结果集的一种机制 --声明游标 --ISO 语法 DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR FOR select_state ...
- 技术揭秘:华为云DLI背后的核心计算引擎
摘要:介绍隐藏在华为云数据湖探索服务背后的核心计算引擎Spark,玩转DLI,,轻松完成大数据的分析处理. 本文主要给大家介绍隐藏在华为云数据湖探索服务(后文简称DLI)背后的核心计算引擎——Spar ...
- JDK 8 新特性之函数式编程 → Stream API
开心一刻 今天和朋友们去K歌,看着这群年轻人一个个唱的贼嗨,不禁感慨道:年轻真好啊! 想到自己年轻的时候,那也是拿着麦克风不放的人 现在的我没那激情了,只喜欢坐在角落里,默默的听着他们唱,就连旁边的妹 ...
- Htmlcss学习笔记1——html基础
Hyper text markup language 超文本标签语言.不是一种编程语言,而是一种标记语言标记语言是一套标记标签 开发工具 chrome subline vscode photoshop ...
- 关于bat批处理的一些操作,如启动jar 关闭进程等
先说一下学习这个的前提: 公司要写个生成uid的工具,整完了之后就又整批处理工具,出于此目的,也是为了丰富自己的知识,就学习了一下,下面是相关的批处理脚本 我花了半天的时间找了相关的bat批处理,但是 ...
- 这应该是最适合国内用户的K3s HA方案
前 言 在面向生产环境的实践中,高可用是我们无法避免的问题,K3s本身也历经多个版本的迭代,HA方案也进行了不断优化,形成了目前的比较稳定的HA方案. 目前官方提供两种HA方案: 嵌入式DB的高可用( ...
- AngularJS中的父作用域与自作用域
对于$scope上的原生类型,如$scope.name=""; 自作用域获取变量时,会查找作用域本身,找不到就会查找父作用域 修改时,若本作用域不存在,就会在本作用域创建一个变量, ...
- 小程序开发-使用xpath解析网页html中的数据
最新有个微信小程序的开发需求,需要从网页中提取一些元素信息,获取有效数据 1. 了解到微信小程序里面不能直接操作dom元素,所以我们需要使用一些其他的npm包 2. 经过查到各方面的文档,最新决定用x ...
- ElasticsSearch初装 环境Win10
步骤: 1.从 http://how2j.cn/frontdownload?bean.id=1694 下载6.22 版本 2.双击elasticsearch.bat启动ElasticsSearch [ ...
- Ajax获取接口数据,url拼接参数跳转页面,js获取上一级页面参数给本页面
1.Ajax获取接口数据 function demo(){ //假设请求参数 var requestBody = [{ "name":"zhang", &quo ...