shiro+spring+mybatis

web.

Under the WEB-INFO

1、欢迎页,设置web启动时的首页
  <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>index1.jsp</welcome-file> 
  </welcome-file-list> 

2、错误页设置

  <error-page>
       <error-code>404</error-code>
       <location>/error</location>
  </error-page>

3、过滤器设置
        <filter>  
            <filter-name>shiroFilter</filter-name>  
            <filter-class>org.spring work.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拦截的URL
        </filter-mapping>

4、还可以设置Session、Listener、Servlet、初始化参数等

5、在本项目中,spring没有在 配置,直接在Java代码中配置,web. 看起来很简洁,只有filter、welcomePage&ErrorPage

spring-pz-shiro.

1、 ns命名空间等

2、配置dataSource

    <bean id=\"dataSource\"  
        class=\"org.spring work.jdbc.datasource.DriverManagerDataSource\">  
        <property name=\"driverClassName\" value=\"com.mysql.jdbc.Driver\" />  
        <property name=\"url\" value=\"jdbc:mysql://127.0.0.1:3306/ityks\" />  
        <property name=\"username\" value=\"root\" />  
        <property name=\"password\" value=\"root\" />  
    </bean>

3、在spring整合shiro的项目中加上,其作用是管理和整合shiro bean

<bean id=\"lifecycleBeanPostProcessor\" class=\"org.apache.shiro.spring.LifecycleBeanPostProcessor\"></bean>

4、我们使用MD5加密密码,所以需要配置一个密码管理的类,配置一个密码匹配对象

<bean id=\"credentialsMatcher\" class=\"org.apache.shiro.authc.credential.Md5CredentialsMatcher\"></bean>

5、缓存管理

<bean id=\"cacheManager\" class=\"org.apache.shiro.cache.MemoryConstrainedCacheManager\"></bean>

 

6、使用shiro自带的Realm

     <bean id=\"jdbcRealm\" class=\"org.apache.shiro.realm.jdbc.JdbcRealm\">  
         <property name=\"credentialsMatcher\" ref=\"credentialsMatcher\"></property>  密码匹配规则
         <property name=\"permissionsLookupEnabled\" value=\"true\"></property>TURE就允许使用,通过角色查所有权限
         <property name=\"dataSource\" ref=\"dataSource\"></property>  数据源
         <property name=\"authenticationQuery\"用户登录,登录用户名作为条件,查询密码字段,验证登录
             value=\"SELECT password FROM sys_login WHERE username = ?\"></property>  
         <property name=\"userRolesQuery\"  用户名查角色
             value=\"SELECT role_name from sys_login_role slr left join sys_role using(role_id) left join sys_login using(login_id) WHERE slr.username = ?\"></property>  
         <property name=\"permissionsQuery\"  遍历角色查所有权限
             value=\"SELECT permission_name FROM sys_role_permission srp left join sys_role using(role_id) left join sys_permission using(permission_id) WHERE srp.role_name = ?\"></property>  
     </bean> 

---------------------------------------------------------分割------------------------------------------------------------

关于密码的规则配置

<bean id=\"hashedCredentialsMatcher\"
    class=\"org.apache.shiro.authc.credential.HashedCredentialsMatcher\">
        <property name=\"hashAlgorithmName\" value=\"MD5\" />使用哪种加密方式
        <property name=\"storedCredentialsHexEncoded\" value=\"true\" />编码方式,Hex还是 64
        <property name=\"hashIterations\" value=\"1\" />密码加密递归次数
</bean>

7、     shiro的核心安全管理器securityManager

<bean id=\"securityManager\" class=\"org.apache.shiro.web.mgt.DefaultWebSecurityManager\">  
         <property name=\"realm\" ref=\"jdbcRealm\"></property>  
         <property name=\"cacheManager\" ref=\"cacheManager\"></property>  
 </bean>

8、shiro的过滤器

     <bean id=\"shiroFilter\" class=\"org.apache.shiro.spring.web.ShiroFilterFactoryBean\">  
         <property name=\"securityManager\" ref=\"securityManager\"></property>  核心对象
         <property name=\"loginUrl\" value=\"/login.jsp\"></property>  要求登录时的链接(登录页面地址),非必须的属性,默认会自动寻找Web工程根目录下的\"/login.jsp\"页面
         <property name=\"successUrl\" value=\"/index\" ></property>  登录成功后要跳转的连接
         <property name=\"unauthorizedUrl\" value=\"/\"></property>  用户访问未对其授权的资源时,所显示的连接
         <property name=\"filterChainDefinitions\">  制订过滤规则,从上到下,从左往右
             <value>  
                 <!-- /index=authc
                 /question=roles[\"admin\"]
                 /question/**=roles[\"admin\"] -->
             </value>  
         </property>  
     </bean>

spring-transaction.

1、    把.propertites文件中的动态value写到 里面,例子中\"location\"的值就是jdbc.properties的值

<bean id=\"propertyConfigurer\"
        class=\"org.spring work.beans.factory.config.PropertyPlaceholderConfigurer\">
        <property name=\"location\" value=\"classpath:jdbc.properties\" />
    </bean>

2、spring管理属性文件:PropertiesFactoryBean和PropertyPlaceholderConfigurer的区别

PropertyPlaceholderConfigurer  &  PropertiesFactoryBean几乎是一样的,官方推荐用PropertyPlaceholderConfigurer

 不用太纠结这个,都是读.properties

3、连接池

现在大部分都用的阿里的druid连接池4、

    <bean id=\"dataSourceDDS\" class=\"com.alibaba.druid.pool.DruidDataSource\"
        destroy-method=\"close\">
        <property name=\"driverClassName\" value=\"${driver}\" />
        <property name=\"url\" value=\"${url}\" />
        <property name=\"username\" value=\"${username}\" />
        <property name=\"password\" value=\"${password}\" />
        <!-- 初始化连接大小 -->
        <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>

4、    myBatis的配置

<bean id=\"sqlSessionFactory\" class=\"org.mybatis.spring.SqlSessionFactoryBean\">
        <property name=\"dataSource\" ref=\"dataSourceDDS\" />该属性必须配置,多数据源时会有多个dataSource,同时也需要配置多个sqlSessionFactory来对应
        <property name=\"mapperLocations\">mapperLocations & configLocation 都是用来给mybatis工厂配置
            <list>
                <value>classpath:com/mrkj/ygl/config/mapping/*. </value>
            </list>
        </property>
    </bean>

在本项目中,myBatis的map映射里面写了很多sql语句,这里是spring通过myBatis操控数据库的主战场

5、用自动扫DAO的类,自动装配,然后被spring控制

    <bean class=\"org.mybatis.spring.mapper.MapperScannerConfigurer\">
        <property name=\" Package\" value=\"com.mrkj.ygl.dao\" /> Package 属性是让你为映射器接口文件设置基本的包路径
        <property name=\"sqlSessionFactoryBeanName\" value=\"sqlSessionFactory\"></property>在多个数据源的情况下,设置属性名来区分装配的类
    </bean>

6、    事务管理,访问数据库需要

<bean id=\"transactionManager\"
        class=\"org.spring work.jdbc.datasource.DataSourceTransactionManager\">
        <property name=\"dataSource\" ref=\"dataSourceDDS\" />
    </bean>

暂时待定

 

收藏 打印