shiro与Web项目整合-Spring+SpringMVC+Mybatis+Shiro(八)

Jar包

aaarticlea/png;base64,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" alt="" />

-----------------------------Web.xml中配置shiro的filter------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>WebShiro</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-*.xml</param-value>
</context-param> <!-- Spring监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- 处理POST提交乱码问题 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping> <!-- 前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 默认找 /WEB-INF/[servlet的名称]-servlet.xml -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet> <servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- 1. /* 拦截所有 jsp js png .css 真的全拦截 建议不使用 2. *.action *.do 拦截以do action
结尾的请求 肯定能使用 ERP 3. / 拦截所有 (不包括jsp) (包含.js .png.css) 强烈建议使用 前台 面向消费者 www.jd.com/search
/对静态资源放行 -->
<url-pattern>*.action</url-pattern>
</servlet-mapping> <!-- shiro过虑器,DelegatingFilterProx会从spring容器中找shiroFilter -->
<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>
</web-app>

-------------------------------spring的配置文件----------------------

applicationContext-dao.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <context:property-placeholder location="classpath:db.properties"/> <!-- 数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="5" />
</bean> <!-- Mybatis的工厂 -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 核心配置文件的位置 -->
<property name="configLocation" value="classpath:sqlMapConfig.xml"/>
</bean> <!-- Mapper动态代理开发 扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 基本包 -->
<property name="basePackage" value="cn.qlq.springmvc.mapper"/>
</bean> <!-- 注解事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean> <!-- 开启注解 -->
<!-- <tx:annotation-driven transaction-manager="transactionManager"/> --> </beans>

--------------------------------------------SpringfMVC的配置----------------------------

springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd "> <!-- 扫描@Controler @Service -->
<context:component-scan base-package="cn.qlq.springmvc" /> <!-- 开启aop,对类代理 -->
<aop:config proxy-target-class="true"></aop:config>
<!-- 开启shiro注解支持 -->
<bean
class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager" />
</bean> <!-- 处理器映射器 -->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> -->
<!-- 处理器适配器 -->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> -->
<!-- 注解驱动,代替上面两个 -->
<mvc:annotation-driven conversion-service="conversionServiceFactoryBean" />
<!-- 视图解释器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean> <!-- 配置Conveter转换器 转换工厂 (日期、去掉前后空格)。。 -->
<bean id="conversionServiceFactoryBean"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!-- 配置 多个转换器 -->
<property name="converters">
<list>
<bean class="cn.qlq.springmvc.conversion.DateConveter" />
<!-- 可以配置多个转换器 -->
<!-- <bean class="com.itheima.springmvc.conversion.DateConveter" /> <bean
class="com.itheima.springmvc.conversion.DateConveter" /> -->
</list>
</property>
</bean> <!-- 配置异常处理器 -->
<bean class="cn.qlq.springmvc.Exception.MyExceptionHandler"></bean> <!-- 上传图片配置实现类,id必须为这个 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 上传图片的大小 B 5M 1*1024*1024*5 -->
<property name="maxUploadSize" value="5000000" />
</bean> <!-- 配置拦截器 ,可以配置多个 -->
<!-- <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /> 用户认证拦截
<bean class="cn.qlq.springmvc.inteceptor.LoginInterceptor"></bean> </mvc:interceptor>
<mvc:interceptor> <mvc:mapping path="/**" /> 用户权限拦截 <bean class="cn.qlq.springmvc.inteceptor.PermissionInterceptor"></bean>
</mvc:interceptor> </mvc:interceptors> --> </beans>

------------------------------------------Mybatis的配置------------------------------------------

sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 设置别名 -->
<!-- <typeAliases>
2. 指定扫描包,会把包内所有的类都设置别名,别名的名称就是类名,大小写不敏感
<package name="cn.qlq.springmvc.pojo" />
</typeAliases> --> </configuration>

--------------------------------------------------------Shiro的配置-------------------------------------------------

applicationContext-shiro.xml(完整的xml配置,后面讲介绍作用)

在applicationContext-shiro.xml 中配置web.xml中fitler对应spring容器中的bean。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- web.xml中shiro的filter对应的bean -->
<!-- Shiro 的Web过滤器 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<!-- loginUrl认证提交地址,如果没有认证将会请求此地址进行认证,请求此地址将由formAuthenticationFilter进行表单认证 -->
<property name="loginUrl" value="/login.action" />
<!-- 认证成功统一跳转到first.action,建议不配置,shiro认证成功自动到上一个请求路径 -->
<property name="successUrl" value="/first.action" />
<!-- 通过unauthorizedUrl指定没有权限操作时跳转页面 -->
<property name="unauthorizedUrl" value="/refuse.jsp" />
<!-- 自定义filter配置 -->
<property name="filters">
<map>
<!-- 将自定义 的FormAuthenticationFilter注入shiroFilter中 -->
<entry key="authc" value-ref="formAuthenticationFilter" />
</map>
</property>
<!-- 过虑器链定义,从上向下顺序执行,一般将/**放在最下边 -->
<property name="filterChainDefinitions">
<value>
<!-- 静态资源放行 -->
/images/** = anon
/js/** = anon
/styles/** = anon
<!-- 对错误页面放行 -->
/error.jsp = anon
<!-- 验证码,可匿名访问 -->
/validatecode.jsp = anon <!-- 配置记住我或认证通过可以访问的地址 -->
/index.jsp = user
/first.action = user
/welcome.jsp = user
<!--商品查询需要商品查询权限 ,取消url拦截配置,使用注解授权方式 -->
<!-- /itemEdit.action = perms[item:edit] --> <!-- 请求 logout.action地址,shiro去清除session -->
/logout.action = logout <!-- /** = authc 所有url都必须认证通过才可以访问 -->
/** = authc <!-- 所有url都可以匿名访问 -->
<!-- /** = anon -->
</value>
</property>
</bean> <!-- securityManager安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!-- 注入realm -->
<property name="realm" ref="customRealm" />
<!-- 注入缓存管理器 -->
<property name="cacheManager" ref="cacheManager" />
<!-- 注入session管理器 -->
<property name="sessionManager" ref="sessionManager" />
<!-- 记住我 -->
<property name="rememberMeManager" ref="rememberMeManager" />
</bean> <!-- realm -->
<bean id="customRealm" class="cn.qlq.springmvc.shiro.CustomRealm">
<!-- 将凭证匹配器设置到realm中,realm按照凭证匹配器的要求进行散列 -->
<property name="credentialsMatcher" ref="credentialsMatcher" />
</bean> <!-- 凭证匹配器 -->
<bean id="credentialsMatcher"
class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
<property name="hashAlgorithmName" value="md5" />
<property name="hashIterations" value="1" />
</bean> <!-- 缓存管理器 -->
<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的失效时长,单位毫秒 -->
<property name="globalSessionTimeout" value="600000" />
<!-- 删除失效的session -->
<property name="deleteInvalidSessions" value="true" />
</bean> <!-- 自定义form认证过虑器 -->
<!-- 基于Form表单的身份验证过滤器,不配置将也会注册此过虑器,表单中的用户账号、密码及loginurl将采用默认值,建议配置 -->
<bean id="formAuthenticationFilter" class="cn.qlq.springmvc.shiro.CustomFormAuthenticationFilter ">
<!-- 表单中账号的input名称 -->
<property name="usernameParam" value="username" />
<!-- 表单中密码的input名称 -->
<property name="passwordParam" value="password" />
<!-- 记住我input的名称 -->
<property name="rememberMeParam" value="rememberMe" />
</bean> <!-- rememberMeManager管理器,写cookie,取出cookie生成用户信息 -->
<bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">
<property name="cookie" ref="rememberMeCookie" />
</bean>
<!-- 记住我cookie -->
<bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<!-- rememberMe是cookie的名字 -->
<constructor-arg value="rememberMe" />
<!-- 记住我cookie生效时间30天 -->
<property name="maxAge" value="2592000" />
</bean> </beans>

对一些静态资源放行:

aaarticlea/png;base64,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" alt="" />

shiro-ehcache.xml   缓存配置文件

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<!--diskStore:缓存数据持久化的目录 地址 -->
<diskStore path="F:\develop\ehcache" />
<defaultCache
maxElementsInMemory="1000"
maxElementsOnDisk="10000000"
eternal="false"
overflowToDisk="false"
diskPersistent="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
</defaultCache>
</ehcache>

---------------------------------------数据库配置文件------------------------------------------------

db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/shiro?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
上一篇:java多线程系列(三)---等待通知机制


下一篇:ORACLE system表空间满