shiro与ssm环境的搭建
程序员文章站
2022-03-15 23:25:30
...
最近在写社团后台管理系统,需要用到授权和认证。于是就学习了一下shiro,这一篇文章用来记录一下自己初次使用shiro来整合ssm,也方便初学者进行学习。此文章前提是已经配好ssm框架,还没有整合ssm的小伙伴,请先完成ssm的配置。
一、添加shiro依赖
在pom.xml文件中添加shiro的依赖
<!-- 添加shiro支持 -->
<!--shiro核心包-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.3</version>
</dependency>
<!-- web相关包-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.2.3</version>
</dependency>
<!--与spring整合包-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.2.3</version>
</dependency>
<!--缓存包-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-ehcache</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
二、shiro在web.xml的配置
在web.xml中加入shiro的过滤器
<!--Shiro过滤器-->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
三、自定义realm
在java中创建一个shiro包,添加CustomRealm类,继承AuthorizingRealm
这里会用到shiro的两个方法doGetAuthorizationInfo和doGetAuthenticationInfo,用来授权和认证,不明白的小伙伴可以看看shiro的自定义realm教程
@Component
public class CustomRealm extends AuthorizingRealm {
/**
* 授权
* realm授权方法 从输入参数principalCollection得到身份信息 根据身份信息到数据库查找权限信息 将权限信息添加给授权信息对象
* 返回 授权信息对象(判断用户访问url是否在权限信息中没有体现)
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
return null;
}
/**
* 认证
* 表单认证过滤器认证时会调用自定义Realm的认证方法进行认证,成功回到index.do,再跳转到index.jsp页面
*
* 前提:表单认证过滤器收集和组织用户名和密码信息封装为token对象传递给此方法
*
* token:封装了身份信息和凭证信息 2步骤:比对身份 信息;比对凭证
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
return null;
}
}
四、shiro在applicationContext.xml的配置
这里为了方便,没有把它单独与spring的配置分开,shiro的配置写在了applicationContext.xml中,代码中有详细注释
<!-- web.xml中shiro的filter对应的bean -->
<!--扫描shiro中的realm-->
<context:component-scan base-package="com.meng.shiro"/>
<!-- Shiro 的Web过滤器 -->
<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="/index"/> --> <!-- 如果配置,成功认证后跳转到index.do地址,通常不配置 -->
<!-- <property name="unauthorizedUrl" value="/refuse"/> --> <!-- 没有权限,跳转到refuse.do地址,注解无效 -->
<property name="filterChainDefinitions">
<!--不用认证也可以访问的url-->
<value>
/login*=anon
/layuiadmin/**=anon
/loginout=logout <!--logout:注销过滤器,此拦截器设置的url可以不对应一个真实存在controller方法-->
/**=authc <!-- authc 表示需要认证才能访问的页面 -->
</value>
</property>
</bean>
<!-- 安全管理器定义 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="customRealm"/> <!-- 注入自定义Realm -->
<property name="cacheManager" ref="cacheManager" /> <!-- 注入缓存管理器 -->
<property name="sessionManager" ref="sessionManager" /> <!-- 注入session管理器 -->
</bean>
<!-- 凭证匹配器 -->
<bean id="credentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
<property name="hashAlgorithmName" value="md5" /> <!-- 加密方式-->
<property name="hashIterations" value="2" /> <!-- 散列次数-->
</bean>
<!-- 自定义Realm -->
<bean id="customRealm" class="com.meng.shiro.CustomRealm">
<!-- 将凭证匹配器设置到realm中,realm按照凭证匹配器的要求进行散列 -->
<property name="credentialsMatcher" ref="credentialsMatcher"/>
</bean>
<!-- 缓存管理器授权管理时候,每一次授权判断都会重新到数据库中查询一次用户对应button内心的权限 -->
<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
<property name="cacheManagerConfigFile" value="classpath:shiro-ehcache.xml"/>
</bean>
<!-- 会话管理器 -->
<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
<!-- session的失效时长(24小时),单位毫秒 -->
<property name="globalSessionTimeout" value="86400000"/>
<!-- 删除失效的session -->
<property name="deleteInvalidSessions" value="true"/>
</bean>
五、在资源目录下添加shiro-ehcache.xml缓存配置文件
<ehcache>
<!--diskStore:缓存数据持久化的目录 地址 -->
<diskStore path="G:\" />
<defaultCache
maxElementsInMemory="1000"
maxElementsOnDisk="10000000"
eternal="false"
overflowToDisk="false"
diskPersistent="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
</defaultCache>
</ehcache>
做到这里,shiro集成ssm这个框架算是搭好了,运行后不报错,说明整合是没有问题的。
上一篇: 2、多台虚拟机免密
下一篇: fastjson,处理空字段问题。
推荐阅读
-
Linux系统上Nginx+Python的web.py与Django框架环境
-
Ubuntu中搭建Nginx、PHP环境最简单的方法_PHP
-
centos下yum搭建安装linux+apache+mysql+php环境的方法
-
spring Boot环境下dubbo+zookeeper的一个基础讲解与示例
-
基于open62541在QT编写OPCUA特定的客户端程序(含有源码) + VS2015 C语言搭建OPCUA客户端环境
-
Linux环境下搭建php开发环境的操作步骤
-
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程,
-
centos7mongoDB启动与停止、环境搭建
-
java环境包搭建安装(java最常用的五个包)
-
在Windows8上的搭建Python和Django环境