zoukankan      html  css  js  c++  java
  • shiro配置参考(二)可以和mybatis的配置放在一个文件中(不建议这样,可以拆分开来,注意相关配置即可)

    <?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:aop="http://www.springframework.org/schema/aop"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">
    
        <!-- 自动扫描的目录 -->
        <context:component-scan base-package="com.ang.elearning"></context:component-scan>
    
        <!-- 引入配置文件 -->
        <bean id="propertyConfigurer"
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="location" value="classpath:db.properties"></property>
        </bean>
    
        <!-- 配置dbcp数据源 -->
        <!-- destroy-method="close"保证当spring不在Web Container或是EJB Container中的情况下,在tomcat退出时, 
            调用AbstractApplicationContext的close方法,其实就是调用context中beanFactory的destroySingletons()方法 -->
        <bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"
            destroy-method="close">
            <property name="driverClassName" value="${driver}"></property>
            <property name="url" value="${url}"></property>
            <property name="username" value="${username}"></property>
            <property name="password" value="${password}"></property>
            <!-- 初始化连接大小 -->
            <property name="initialSize" value="${initialSize}"></property>
            <!-- 连接池最大数量 -->
            <property name="maxActive" value="${maxActive}"></property>
            <!-- 连接池最大空闲 -->
            <property name="maxIdle" value="${maxIdle}"></property>
            <!-- 连接池最小空闲 -->
            <property name="minIdle" value="${minIdle}"></property>
            <!--  获取连接最大等待时间 
            <property name="maxWait" value="${maxWait}"></property> -->
        </bean>
    
        <!-- 配置SqlSessionFactoryBean -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="datasource"></property>
    
            <!-- 指定扫描mybatis映射文件的目录 -->
            <property name="mapperLocations" value="classpath:com/ang/elearning/mapping/*.xml"></property>
        </bean>
    
        <!-- 为每一个mapper接口手动配置MapperFactoryBean,不推荐,推荐使用下面的方法 -->
        <!-- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> 
            <property name="mapperInterface" value="com.ang.elearning.dao.UserMapper"></property> 
            <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean> -->
    
        <!-- 注册MapperScannerConfigurer,自动创建MapperFactoryBean -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    
            <!-- basePackage指定mapper接口所在的包名,MapperScannerConfigurer会查找该类路径下的接口并自动为其创建MapperFactoryBean -->
            <property name="basePackage" value="com.ang.elearning.dao"></property>
    
            <!-- 当只有一个datasource时,不用指定,因为MapperScannerConfigurer会自动装配MapperFactoryBean 
                但是,当有多个datasource时,自动装配可能失效。另外,这里配置的是bean的名称,所以不能用ref -->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
        </bean>
    
        <!-- 配置事务管理器 -->
        <bean id="transactionManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="datasource"></property>
        </bean>
    
        <!-- 配置事务属性 -->
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="add*" propagation="REQUIRED" />
                <tx:method name="insert*" propagation="REQUIRED" />
                <tx:method name="delete*" propagation="REQUIRED" />
                <tx:method name="update*" propagation="REQUIRED" />
                <tx:method name="get*" read-only="true" />
                <tx:method name="select*" read-only="true" />
                <tx:method name="*" propagation="REQUIRED" />
            </tx:attributes>
        </tx:advice>
    
        <!-- 配置事务切入点,以及把事务切入点和事务属性关联起来 -->
        <aop:config>
            <!-- 对com.ang.elearning.service.impl包下的所有类的所有方法执行事务 -->
            <aop:pointcut expression="execution(* com.ang.elearning.service.impl.*.*(..))"
                id="pointcut" />
            <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut" />
        </aop:config>
    
        <!---------------------------------------------------------------------------------------------------------------->
        
        <!-- shiro start -->
        <!-- 1. 配置SecurityManager -->
        <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
            <property name="cacheManager" ref="cacheManager" />
            <property name="authenticator" ref="authenticator"></property>
            <!-- 可以配置多个Realm,其实会把realms属性赋值给ModularRealmAuthenticator的realms属性 -->
            <property name="realms">
                <list>
                    <ref bean="userRealm" />
                    <ref bean="adminRealm"/>
                    <ref bean="teacherRealm"/>
                </list>
            </property>
        </bean>
    
        <!-- 2. 配置CacheManager -->
        <!-- 2.1 需要加入ehcache的jar包及配置文件 -->
        <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
            <property name="cacheManagerConfigFile" value="classpath:ehcache.xml" />
        </bean>
    
        <!-- 3. 配置Realm -->
        <!-- 3.1 直接配置继承了 org.apache.shiro.realm.AuthorizingRealm的bean -->
        <bean id="userRealm" class="com.ang.elearning.shiro.UserRealm">
            <!-- 配置密码匹配器 -->
            <property name="credentialsMatcher">
                <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
                    <!-- 加密算法为MD5 -->
                    <property name="hashAlgorithmName" value="MD5"></property>
                    <!-- 加密次数 -->
                    <property name="hashIterations" value="1024"></property>
                </bean>
            </property>
        </bean>
    
        <bean id="adminRealm" class="com.ang.elearning.shiro.AdminRealm">
            <!-- 配置密码匹配器 -->
            <property name="credentialsMatcher">
                <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
                    <!-- 加密算法为MD5 -->
                    <property name="hashAlgorithmName" value="MD5"></property>
                    <!-- 加密次数 -->
                    <property name="hashIterations" value="1024"></property>
                </bean>
            </property>
        </bean>
        
        <bean id="teacherRealm" class="com.ang.elearning.shiro.TeacherRealm">
            <!-- 配置密码匹配器 -->
            <property name="credentialsMatcher">
                <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
                    <!-- 加密算法为MD5 -->
                    <property name="hashAlgorithmName" value="MD5"></property>
                    <!-- 加密次数 -->
                    <property name="hashIterations" value="1024"></property>
                </bean>
            </property>
        </bean>
    
        <!-- 4. 配置LifecycleBeanPostProcessor,可以自定义地来调用配置在Spring IOC容器中shiro bean的生命周期方法 -->
        <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
    
        <!-- 5. 使能够在IOC容器中使用shiro的注解,但必须在配置了LifecycleBeanPostProcessor之后才可以使用 -->
        <bean
            class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
            depends-on="lifecycleBeanPostProcessor" />
        <bean
            class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
            <property name="securityManager" ref="securityManager" />
        </bean>
    
        <!-- 6. 配置ShiroFilter -->
        <!-- 6.1 id必须和web.xml中配置的DelegatingFilterProxy的<filter-name>一致。 如果不一致,会抛出NoSuchBeanDefinitionException异常,因为shiro会在IOC容器中查找名称和<filter-name> 
            值一致的filter bean -->
        <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
            <property name="securityManager" ref="securityManager" />
            <property name="loginUrl" value="/login.jsp" />
            <property name="unauthorizedUrl" value="/login.jsp" />
            <!-- 配置哪些页面需要受保护,以及访问这些页面需要的权限 -->
            <property name="filterChainDefinitions">
                <value>
                    <!-- 第一次匹配优先的原则 -->
                    /** = anon
                    <!-- /login.jsp = anon
                    /user/login = anon
                    /admin/login = anon
                    /teacher/login = anon
                    
                    测试:只有admin角色可以访问test.jsp
                    /test.jsp = roles[admin]
    
                    /logout = logout
    
                    /** = authc -->
                </value>
            </property>
        </bean>
    
        <!-- 7. 配置使用自定义认证器,可以实现多Realm认证,并且可以根据登录类型指定使用特定的Realm -->
        <bean id="authenticator" class="com.ang.elearning.shiro.CustomizedModularRealmAuthenticator">
            <!-- 配置认证策略,只要有一个Realm认证成功即可,并且返回所有认证成功信息 -->
            <property name="authenticationStrategy">
                <bean class="org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy"></bean>
            </property>
        </bean>
        <!-- shiro end -->
    </beans>
  • 相关阅读:
    Linux NFS服务器的安装与配置
    Genymotion加速下载虚拟镜像速度慢失败Connection timeout
    人脸识别的损失函数
    caffe服务器搭建血泪记录
    shell
    ZigZag Conversion
    SSH阅读笔记
    numpy数组扩展函数repeat和tile用法
    高效网络小结
    Bag of Tricks for Image Classification with Convolutional Neural Networks论文笔记
  • 原文地址:https://www.cnblogs.com/xh_Blog/p/8241251.html
Copyright © 2011-2022 走看看