SSM+shiro核心配置文件

一、web.xml


<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">
  
  
  <servlet>
    <servlet-name>SpringMVCservlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    <init-param>
      <param-name>contextConfigLocationparam-name>
      <param-value>classpath*:/spring/spring-mvc.xmlparam-value>
    init-param>
    <load-on-startup>1load-on-startup>
  servlet>
  <servlet-mapping>
    <servlet-name>SpringMVCservlet-name>
    
    <url-pattern>/url-pattern>
  servlet-mapping> 
  

  
  
  <context-param>
    <param-name>contextConfigLocationparam-name>
    <param-value>classpath*:/spring/spring-application.xml,classpath*:/spring/spring-shiro.xmlparam-value>
  context-param>
   
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
  listener>
  
  <filter>
    <filter-name>encodingFilterfilter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
    <init-param>
      <param-name>encodingparam-name>
      <param-value>UTF-8param-value>
    init-param>
    <init-param>
      <param-name>forceEncodingparam-name>
      <param-value>trueparam-value>
    init-param>
  filter>
  <filter-mapping>
    <filter-name>encodingFilterfilter-name>
    <url-pattern>/*url-pattern>
    
    <dispatcher>REQUESTdispatcher>
    
    <dispatcher>FORWARDdispatcher>
  filter-mapping>
  

  
  
  <filter>
    <filter-name>shiroFilterfilter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxyfilter-class>
    <init-param>
      <param-name>targetFilterLifecycleparam-name>
      <param-value>trueparam-value>
    init-param>
  filter>
  <filter-mapping>
    <filter-name>shiroFilterfilter-name>
    <url-pattern>/*url-pattern>
    <dispatcher>REQUESTdispatcher>
    <dispatcher>FORWARDdispatcher>
  filter-mapping>
  
web-app>

二、spring-mvc.xml


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        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">

    
    <context:component-scan base-package="com" use-default-filters="false">
        
        
        <context:include-filter type="aspectj" expression="com.jy.controller..*Controller"/>
    context:component-scan>

       
      
    <mvc:default-servlet-handler/>
     
    
    

    
    
    <bean id="freemarkerConfig"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/WEB-INF/views/" />
        <property name="defaultEncoding" value="utf-8" />
        <property name="freemarkerSettings">
            <props>
                <prop key="template_update_delay">1prop>
                <prop key="locale">zh_CNprop>
                <prop key="datetime_format">yyyy-MM-ddprop>
                <prop key="date_format">yyyy-MM-ddprop>
                <prop key="number_format">#.##prop>
                <prop key="auto_import">/manager/include/macro.ftl as msprop>                 
            props>
        property>
    bean>

    
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">

        <property name="viewClass"
            value="org.springframework.web.servlet.view.freemarker.FreeMarkerView">property>
        <property name="suffix" value=".ftl" />
        <property name="contentType" value="text/html;charset=utf-8" />
        <property name="allowRequestOverride" value="true" /> 
        <property name="exposeRequestAttributes" value="true" />
        <property name="exposeSessionAttributes" value="true" />
        <property name="exposeSpringMacroHelpers" value="true" />
        
        <property name="order" value="1" />
    bean>

    
    <bean id="JSPviewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView">property>
        <property name="prefix" value="/WEB-INF/views/">property>
        <property name="suffix" value=".jsp">property>
        <property name="order" value="2" />
    bean>

    <mvc:annotation-driven>
        
        
        <mvc:message-converters register-defaults="true">
            
            <bean
                class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8value>
                        <value>text/json;charset=UTF-8value>
                        <value>application/json;charset=UTF-8value>
                    list>
                property>
            bean>
        mvc:message-converters>
    mvc:annotation-driven>

    
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        
        <property name="defaultEncoding" value="utf-8" />
        
        <property name="maxUploadSize" value="1048576000" />
        
        <property name="maxInMemorySize" value="40960" />

    bean>
    
beans>

三、spring-application.xml


<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: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.xsd
                        http://www.springframework.org/schema/context 
                        http://www.springframework.org/schema/context/spring-context.xsd
                        http://www.springframework.org/schema/tx 
                        http://www.springframework.org/schema/tx/spring-tx.xsd">

    <description>Spring Configurationdescription>

    
    
    <context:annotation-config />

    
    
    <context:component-scan base-package="com.jy">
        <context:exclude-filter type="annotation"
            expression="org.springframework.stereotype.Controller" />
    context:component-scan>

    <import resource="spring-datasource.xml"/>  
beans>

spring-datasource.xml


<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:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"
       default-lazy-init="true">

    
    
    
    <context:property-placeholder ignore-unresolvable="true" location="classpath*:/spring/dbconfig.properties" /> 

    
    <bean name="mysqlDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="driverClassName" value="${jdbc.mysql.driver}"/>
        <property name="url" value="${jdbc.mysql.url}" />
        <property name="username" value="${jdbc.mysql.username}" />
        <property name="password" value="${jdbc.mysql.password}" />
        
        <property name="defaultAutoCommit" value="true">property>

        
        <property name="initialSize" value="${druid.initialSize}" />
        
        <property name="maxActive" value="${druid.maxActive}" />
        
      
        
        <property name="minIdle" value="${druid.minIdle}" />
             
        <property name="maxWait" value="${druid.maxWait}" />
        
        <property name="removeAbandoned" value="${druid.removeAbandoned}" />
        
        <property name="removeAbandonedTimeout" value="${druid.removeAbandonedTimeout}" />
        
        <property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}" />
        
        <property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}" />
        
        <property name="validationQuery" value="${druid.validationQuery}" />
        
        <property name="testWhileIdle" value="${druid.testWhileIdle}" />
        
        <property name="testOnBorrow" value="${druid.testOnBorrow}" />
        
        <property name="testOnReturn" value="${druid.testOnReturn}" />
        
        <property name="poolPreparedStatements" value="${druid.poolPreparedStatements}" />     
        <property name="maxPoolPreparedStatementPerConnectionSize" value="${druid.maxPoolPreparedStatementPerConnectionSize}" />
        
        <property name="filters" value="${druid.filters}" />     

    bean>

    
    <bean id="mysqlSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        
        <property name="dataSource" ref="mysqlDataSource" />

        
        <property name="configLocation" value="classpath:/spring/mybatis-config.xml" /> 

        
        <property name="typeAliasesPackage" value="com.jy.entity" />

        
        <property name="mapperLocations">
            <list>
                <value>classpath:/mybatis/**/**/*Mapper.xmlvalue>
            list>
        property>

        
        <property name="plugins"><array><ref bean="pagePlugin" />array>property>
    bean>
    
    <bean id="pagePlugin" class="com.jy.common.mybatis.PageInterceptor">
        <property name="properties">
            <props>
                <prop key="databaseType">mysqlprop>
            props>
        property>
    bean>
    

    
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="mysqlSqlSessionFactory"/>
        <property name="basePackage" value="com.jy.repository" />
        
        <property name="annotationClass" value="com.jy.repository.base.JYBatis"/>
    bean>

    
    <bean id="mysqlTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="mysqlDataSource" />
    bean>
    
    <tx:advice id="mysqlTransactionAdvice" transaction-manager="mysqlTransactionManager">
        <tx:attributes>
            
            <tx:method name="save*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
            <tx:method name="insert*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
            <tx:method name="delete*" propagation="REQUIRED"   rollback-for="java.lang.Throwable"/>
            <tx:method name="update*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
            
            <tx:method name="find*" read-only="true" />
            <tx:method name="select*" read-only="true"/>
            <tx:method name="count*" read-only="true"/>
            
            <tx:method name="*" />
        tx:attributes>
    tx:advice>
    <aop:config proxy-target-class="true">
        
        <aop:pointcut id="mysqlTransactionPointcut" expression="execution(* com.jy.service.*.*(..))" />
        
        <aop:advisor pointcut-ref="mysqlTransactionPointcut" advice-ref="mysqlTransactionAdvice" order="1"/>
    aop:config>

    
    <tx:annotation-driven transaction-manager="mysqlTransactionManager" proxy-target-class="true"  order="0"/>

    
beans>

JYBatis注解

package com.jy.repository.base;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.stereotype.Component;

/**
 * 标识MyBatis的DAO,方便{@link org.mybatis.spring.mapper.MapperScannerConfigurer}的扫描。
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Component
public @interface JYBatis {
    String value() default "";
}

四、mybatis-config.xml



<configuration>
    <settings>
        
        <setting name="logImpl" value="STDOUT_LOGGING" /> 
        
    settings>

    



configuration>

五、spring-shiro.xml


<beans xmlns="http://www.springframework.org/schema/beans" 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"
       default-lazy-init="true">

    <description>Shiro Configurationdescription>

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

        
        <bean id="ShiroRealm" class="com.jy.interceptor.shiro.ShiroRealm" >bean>

        
        <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
            <property name="securityManager" ref="securityManager" />   
              
            <property name="loginUrl" value="/loginIndex" />        
            
            <property name="successUrl" value="/backstage/index" /> 
            
            <property name="unauthorizedUrl" value="/loginIndex" />
                
            <property name="filterChainDefinitions">
            <value>
                /api/**              = anon
                /iclock/**              = anon
                /static/js/system/login/**  = anon
                /static/js/system/**        = authc
                /static/**                  = anon
                /favicon.ico                = anon
                /verifyCode/**              = anon
                /system_login               = anon
                /exterInt/**               = anon
                /weixin/**                  = anon
                /upload/**                  = anon
                /**                         = authc
                value>
            property>
        bean>
         
    <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">  
        <property name="cacheManagerConfigFile" value="classpath:/spring/ehcache.xml"/>  
    bean>  

      
    <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor">
        <property name="proxyTargetClass" value="true" />
    bean>

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

六、ShiroRealm

package com.jy.interceptor.shiro;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;

/**
 * 用户身份验证,授权 Realm 组件
 * 
 **/
public class ShiroRealm extends AuthorizingRealm {

//    @Resource
//    private UserService userService;
//
//    @Resource
//    private RoleService roleService;
//
//    @Resource
//    private PermissionService permissionService;

    /**
     * 权限检查(添加角色、权限)
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
        String username = String.valueOf(principals.getPrimaryPrincipal());

//        final User user = userService.selectByUsername(username);
//        final List roleInfos = roleService.selectRolesByUserId(user.getId());
//        for (Role role : roleInfos) {
//            // 添加角色
//            System.err.println(role);
//            authorizationInfo.addRole(role.getRoleSign());
//
//            final List permissions = permissionService.selectPermissionsByRoleId(role.getId());
//            for (Permission permission : permissions) {
//                // 添加权限
//                System.err.println(permission);
//                authorizationInfo.addStringPermission(permission.getPermissionSign());
//            }
//        }
        return authorizationInfo;
    }

    /**
     * 登录验证
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        String username = String.valueOf(token.getPrincipal());
        String password = new String((char[]) token.getCredentials());
        // 通过数据库进行验证
        // ...

        // 在 shiro 中,用户需要提供 principals (身份)和 credentials(证明)给 shiro,从而应用能验证用户身份
        SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(username, password, getName());
        return authenticationInfo;
    }

}

你可能感兴趣的:(初识JAVA)