当前位置: 首页 > news >正文

shiro简单配置

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Spring整合配置

1.web.xml中配置shiro的过滤器

<!--&nbsp;Shiro&nbsp;filter-->
<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>

2.SpringapplicationContext.xml中添加shiro配置 

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="/login" />
<property name="successUrl" value="/login/loginSuccessFull" />
<property name="unauthorizedUrl" value="/login/unauthorized" />
<property name="filterChainDefinitions">
<value>
/home* = anon
/ = anon
/logout = logout
/role/** = roles[admin]
/permission/** = perms[permssion:look]
/** = authc
</value>
</property>
</bean>

securityManager:这个属性是必须的。

loginUrl:没有登录的用户请求需要登录的页面时自动跳转到登录页面,不是必须的属性,不输入地址的话会自动寻找项目web项目的根目录下的”/login.jsp页面。

successUrl:登录成功默认跳转页面,不配置则跳转至”/”。如果登陆前点击的一个需要登录的页面,则在登录自动跳转到那个需要登录的页面。不跳转到此。

unauthorizedUrl:没有权限默认跳转的页面。

anon:例子/admins/**=anon 没有参数,表示可以匿名使用。

authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,没有参数

roles:例子/admins/user/**=roles[admin],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,当有多个参数时,例如admins/user/**=roles["admin,guest"],每个参数通过才算通过,相当于hasAllRoles()方法。

perms:例子/admins/user/**=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。

rest:例子/admins/user/**=rest[user],根据请求的方法,相当于/admins/user/**=perms[user:method] ,其中methodpost,get,delete等。

port:例子/admins/user/**=port[8081],当请求的url的端口不是8081是跳转到schemal://serverName:8081?queryString,其中schmal是协议httphttps等,serverName是你访问的host,8081url配置里port的端口,queryString

是你访问的url里的?后面的参数。

authcBasic例如/admins/user/**=authcBasic没有参数表示httpBasic认证

ssl:例子/admins/user/**=ssl没有参数,表示安全的url请求,协议为https

user:例如/admins/user/**=user没有参数表示必须存在用户,当登入操作时不做检查

注:anon,authcBasic,auchc,user是认证过滤器,

perms,roles,ssl,rest,port是授权过滤器

3.applicationContext.xml中添加securityManagerper配置

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!-- 单realm应用。如果有多个realm,使用‘realms’属性代替 -->
<property name="realm" ref="sampleRealm" />
<property name="cacheManager" ref="cacheManager" />
</bean>
<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager" />

4.配置jdbcRealm

<bean id="sampleRealm" class="org.apache.shiro.realm.jdbc.JdbcRealm">
<property name="dataSource" ref="dataSource" />
<property name="authenticationQuery"
value="select t.password from my_user t where t.username = ?" />
<property name="userRolesQuery"
value="select a.rolename from my_user_role t left join my_role a on t.roleid = a.id where t.username = ? " />
<property name="permissionsQuery"
value="SELECT B.PERMISSION FROM MY_ROLE T LEFT JOIN MY_ROLE_PERMISSION A ON T.ID = A.ROLE_ID LEFT JOIN MY_PERMISSION B ON A.PERMISSION = B.ID WHERE T.ROLENAME = ? " />
<property name="permissionsLookupEnabled" value="true" />
<property name="saltStyle" value="NO_SALT" />
<property name="credentialsMatcher" ref="hashedCredentialsMatcher" />
</bean>

dataSource数据源,配置不说了。

authenticationQuery登录认证用户的查询SQL,需要用登录用户名作为条件,查询密码字段。

userRolesQuery用户角色查询SQL,需要通过登录用户名去查询。查询角色字段

permissionsQuery用户的权限资源查询SQL,需要用单一角色查询角色下的权限资源,如果存在多个角色,则是遍历每个角色,分别查询出权限资源并添加到集合中。

permissionsLookupEnabled默认falseFalse时不会使用permissionsQuerySQL去查询权限资源。设置为true才会去执行。

saltStyle密码是否加盐,默认是NO_SALT不加盐。加盐有三种选择CRYPT,COLUMN,EXTERNAL。详细可以去看文档。这里按照不加盐处理。




转载于:https://my.oschina.net/u/2334022/blog/409011

相关文章:

  • 计划从明年暑假开始,带着宝宝做生意
  • ActiveReports 6.0 - 高效开发UI
  • IOS Devices Version
  • C#文件操作大全
  • SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第3部分)(完结)...
  • Arguments的使用
  • Web服务器磁盘满故障深入解析
  • 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
  • ActionScript3游戏中的图像编程(连载十七)
  • Telnet Windows Server时,提示NTLM authenticatio错误解决方法
  • 深入分析关于DHCP SNOOPING的设置
  • 关于 ACCESS 中插入操作的相关内容
  • 深挖BAT内部级别和薪资待遇,你敢看?(转)
  • 学习 WCF (4)--学会使用配置文件
  • 《3D Math Primer for Graphics and Game Development》读书笔记2
  • [PHP内核探索]PHP中的哈希表
  • 《深入 React 技术栈》
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Just for fun——迅速写完快速排序
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • PHP的Ev教程三(Periodic watcher)
  • Vue 动态创建 component
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 分享一份非常强势的Android面试题
  • 如何优雅地使用 Sublime Text
  • 使用API自动生成工具优化前端工作流
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 学习JavaScript数据结构与算法 — 树
  • No resource identifier found for attribute,RxJava之zip操作符
  • 7行Python代码的人脸识别
  • Spring Batch JSON 支持
  • ​TypeScript都不会用,也敢说会前端?
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (待修改)PyG安装步骤
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (算法二)滑动窗口
  • (译)2019年前端性能优化清单 — 下篇
  • (转) Android中ViewStub组件使用
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net 微服务 服务保护 自动重试 Polly
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .Net7 环境安装配置
  • .Net程序帮助文档制作
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET轻量级ORM组件Dapper葵花宝典
  • [@Controller]4 详解@ModelAttribute
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [Android]一个简单使用Handler做Timer的例子
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [BeginCTF]真龙之力