基于spring的shiro配置
shiro是一个特别简单,易用的框架,在此记录一下shiro的使用配置。
首先,创建四张表:user role user_role permission,分别为用户、角色、用户与角色关系表和权限表。
user表结构:
role表结构:
user_role
permission
当然,表结构如何设计是没有关系的,你可以根据自己偏好设计。
web.xml中加入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>
然后配置shiro,可以写在spring的配置文件中,也可以另起一个配置文件,配置内容如下:
<!-- 配置权限管理器 -->
<bean id="myShiro" class="com.itmayong.util.MyShrio"></bean>
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!-- 我们自定义的realm -->
<property name="realm" ref="myShiro"/>
<!-- 缓存管理器 -->
<property name="cacheManager" ref="cacheManager"/>
</bean> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- 权限管理器 -->
<property name="securityManager" ref="securityManager"/>
<!-- 登录地址 -->
<property name="loginUrl" value="/login.jsp"/>
<!-- 登录后跳转到业务页面 -->
<property name="successUrl" value="/main.jsp"/>
<!-- 错误页面 -->
<property name="unauthorizedUrl" value="/error.jsp"/>
<!-- 权限配置 -->
<property name="filterChainDefinitions">
<value>
<!-- anon无权限访问请求,此处是登录页面和登录请求 -->
/login.do = anon
/static/**=anon
<!-- 需要权限为add的用户才能访问此请求-->
/user=perms[user:add]
<!-- 需要管理员角色才能访问此页面 -->
/user/add=roles[admin]
<!--拦截非静态资源的所有请求-->
/** = authc
</value>
</property>
</bean> <bean id="cacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager" />
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
上面的配置文件我们指定了自定义的realm,内容如下:
public class MyShrio extends AuthorizingRealm{ @Autowired
private UserServiceIf userService;
/**
* 权限认证,获取登录用户的权限
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
String loginName=(String) principalCollection.fromRealm(getName()).iterator().next();
//此处连库匹配了登录用户的数据,具体怎么做,需要根据个人需求而定
User user=userService.findByName(loginName);
List<Role> list = user.getRoleList();
if(user!=null){
SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();
//获取用户的角色名称
info.setRoles(user.getRolesName());
//获取用户的权限
List<Role> roleList=user.getRoleList();
for (Role role : roleList) {
info.addStringPermissions(role.getPermissionsName());
}
return info;
}
return null;
} /**
* 登录认证,创建用户的登录信息
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken authenticationToken) throws AuthenticationException {
UsernamePasswordToken token=(UsernamePasswordToken) authenticationToken;
//判断用户登录状态
User user=userService.findByName(token.getUsername());
if(user!=null){
//保存用户登录信息到认证中
return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName());
}
return null;
} }
最后,你可以写一个页面和Controller进行测试了,当然也可以细分一下权限和角色,以应用到实际更复杂的场景中。
页面内容可以使用下边的方式对需要角色和权限控制的内容进行包裹,以达到权限控制的目的。
<shiro:hasRole name="admin">需要管理员角色</shiro:hasRole>
<shiro:hasPermission name="add">需要add权限</shiro:hasPermission>
此文为记录文章,防止自己以后又忘记,当然,如果能帮助到想用shiro的人更好。如果错误,请多多包涵
基于spring的shiro配置的更多相关文章
- 实战:基于 Spring 的应用配置如何迁移至阿里云应用配置管理 ACM
最近遇到一些开发者朋友,准备将原有的Java Spring的应用配置迁移到 阿里云应用配置管理 ACM 中.迁移过程中,遇到不少有趣的问题.本文将通过一个简单的样例来还原迁移过程中遇到的问题和相关解决 ...
- spring整合shiro配置BUG,Tomcat启动不了:Error during artifact deployment. See server log for details
现象 spring配置shiro权限控制之后,项目无法启动 [2019-08-09 09:00:35,800] Artifact export_web_manager:war exploded: Er ...
- 基于Spring的Appium配置应用
本文主要是讲述,使用Spring框架,优化Appium的Driver调用,并将写在代码里的大量配置参数定义到配置文件当中,还可灵活的控制调用AndroidDriver还是IOSDriver. Spri ...
- spring与shiro配置详解
1.加入shiro相关依赖的jar包 pom.xml部分内容如下: <dependency> <groupId>org.apache.shiro</groupId> ...
- Spring Boot -Shiro配置多Realm
核心类简介 xxxToken:用户凭证 xxxFilter:生产token,设置登录成功,登录失败处理方法,判断是否登录连接等 xxxRealm:依据配置的支持Token来认证用户信息,授权用户权限 ...
- 简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)
前言: shiro因为其简单.可靠.实现方便而成为现在最常用的安全框架,那么这篇文章除了会用简洁明了的方式讲一下基于spring的shiro详细配置和登录注销功能使用之外,也会根据惯例在文章最后总结一 ...
- Spring与Shiro整合
Spring整合篇--Shiro 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 什么是Shiro? 链接:https://www.cnblogs.com/StanleyBlogs/ ...
- 基于Spring框架的Shiro配置
一.在web.xml中添加shiro过滤器 <!-- Shiro filter--> <filter> <filter-name>shiroFilter</ ...
- 基于Spring框架的Shiro配置(转发:http://kdboy.iteye.com/blog/1103794)
一.在web.xml中添加shiro过滤器 <!-- Shiro filter--> <filter> <filter-name>shiroFilter</f ...
随机推荐
- 每日英语:Rethinking How We Watch TV
To understand how much television could soon change, it helps to visit an Intel Corp. division here ...
- storyboard三种sugue 和 跳转场景的三种方式 以及控制器之间的传值
Storyboard引入了2个概念:1. scene:一个场景,由一个viewController和相关的xib表示. 2. segue:在这是用于连接scenes,其有多种类型,iphone包括:P ...
- Python内置函数property()使用实例
class Shuxing(): def __init__(self, size = 10): self.size = size def getSize(self): print('getSize') ...
- 不同classloader装载的类不能互相访问?
一,有两个术语,一个叫“定义类加载器”,一个叫“初始类加载器”. 比如有如下的类加载器结构: bootstrap ExtClassloader AppClassloader -自定 ...
- WP8持续集成之通过命令行跑单元测试
理论基础 对于如何在WP8上创建单元测试工程,在这里首先提供一个MSDN的文档作为参考. http://msdn.microsoft.com/en-us/library/windowsphon ...
- iconfont补遗
一.TureTpe(.ttf)格式: .ttf字体是Windows和Mac的最常见的字体,是一种RAW格式,因此他不为网站优化,支持这种字体的浏览器有[IE9+,Firefox3.5+,Chrome4 ...
- 关于Web应用程序,下列说法错误的是( )。
关于Web应用程序,下列说法错误的是( ). A.WEB-INF目录存在于web应用的根目录下 B. WEB-INF目录与classes 目录平行 C. web.xml在WEB-INF目录下 D. W ...
- dm8127之核间通信syslink
Last updated: June 23, 2010 Contents [hide] 1 About SysLink 1.1 SysLink Architecture 1.2 SysLink Usa ...
- 【BZOJ】1636: [Usaco2007 Jan]Balanced Lineup(rmq+树状数组)
http://www.lydsy.com/JudgeOnline/problem.php?id=1636 (我是不会说我看不懂题的) 裸的rmq.. #include <cstdio> # ...
- 【BZOJ】1676: [Usaco2005 Feb]Feed Accounting 饲料计算(差分)
http://www.lydsy.com/JudgeOnline/problem.php?id=1676 太水的一题了.. 差分直接搞. #include <cstdio> #includ ...