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

01 shiro与spring集成

shiro与spring集成,本案例中没有配置缓存和单点登陆的实现。单点登陆需要导入shiro-cas-1.3.2.jar。Spring相关的JAR包这里不作列举。
shiro的JAR以及依赖包:

     <dependency>
      <groupId>org.apache.shiro</groupId>
      <artifactId>shiro-all</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.16</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.6.4</version>
    </dependency>
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.6.4</version>
  </dependency>


配置过滤器:
web.xml配置:

 <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="shiroAuthenticationRealm" class="com.spec.shiro.ShiroAuthenticationRealm"></bean>
	<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
		<property name="realm" ref="shiroAuthenticationRealm"/>
	</bean>
	<!---->
	<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
		<property name="securityManager" ref="securityManager"/>
		<property name="loginUrl" value="/"/>
		<!--未授权-->
		<property name="unauthorizedUrl" value="/index/goLogin.do"/>
		<property name="filterChainDefinitions">
			<value>
				/plug/** = anon
				/index.jsp = anon
				/login.jsp = anon
				/index/goLogin.do = anon
				/index/login.do = anon
				/** = authc
			</value>
		</property>
	</bean>

代码说明:
1、ShiroAuthenticationRealm自己实现的Realm类,代码见下面的“Realm实现”
2、securityManager中的realm属性,配置为我们自己实现的Realm。
3、shiroFilter的名称必须和web.xml中的filter-name相同。 DelegatingFilterProxy作用是自动到Spring容器查找名字为shiroFilter(filter-name)的bean并把所有Filter的操作委托给它。如果名称不一致,会抛出NoSuchBeanDefinitionException异常。因为Shiro会来IOC容器中查找<filter-name>一样的bean。
4、shiroFilter中loginUrl为登录页面的地址。
5、shiroFilter中successUrl为登录成功页面的地址。
6、shiroFilter中unauthorizedUrl认证未通过访问页面。(未经过授权页面)
7、shiroFilter中filterChainDefinitions属性,anon表示匿名访问(不需要认证与授权),authc表示需要认证


Realm实现:
ShiroAuthenticationRealm类:

public class ShiroAuthenticationRealm extends AuthorizingRealm {
    /**
     * 授权
     * @param principalCollection
     * @return
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }

    /**
     * 登陆信息和用户验证信息验证
     * @param token
     * @return
     * @throws AuthenticationException
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        return null;
    }
}

代码说明:
Realm实现:一般继承AuthorizingRealm(授权)即可,其继承了AuthenticatingRealm(即身份验证),而且也间接继承了CachingRealm(带有缓存实现)。


相关文章:

  • JAVA之自增自减运算符
  • JAVA之“==”和“equals”的区别
  • JAVA之equals对于引用类型比较的方式不同呢
  • JAVA之String,StringBuffer与StringBuilder三者之间的区别
  • JAVA之冒泡(Bubble)排序
  • JAVA之选择排序
  • JAVA之插入排序
  • JAVA之类,构造函数和构造代码块
  • JAVA面试题之冒泡排序,插入排序及选择排序
  • Linux安装JDK步骤
  • Linux之ssh,scp命令的使用
  • Linux之ssh免密登录
  • Hadoop-2.8.0安装教程---单机/伪分布式配置
  • Java之序列化与反序列化
  • Hadoop之常用shell命令整理
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • iOS 系统授权开发
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • js继承的实现方法
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Linux中的硬链接与软链接
  • opencv python Meanshift 和 Camshift
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • win10下安装mysql5.7
  • 关于extract.autodesk.io的一些说明
  • 基于Android乐音识别(2)
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 算法---两个栈实现一个队列
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (附源码)计算机毕业设计高校学生选课系统
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (理论篇)httpmoudle和httphandler一览
  • (五)c52学习之旅-静态数码管
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .net core 连接数据库,通过数据库生成Modell
  • .Net的DataSet直接与SQL2005交互
  • .NET开发不可不知、不可不用的辅助类(一)
  • .NET连接数据库方式
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • [ IO.File ] FileSystemWatcher
  • [145] 二叉树的后序遍历 js
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [android] 练习PopupWindow实现对话框
  • [BJDCTF2020]The mystery of ip1
  • [Codeforces1137D]Cooperative Game