• SSM和Spring Boot常用配置比较


    一.Dao层相关

      1.Mysql相关:

        1.1配置DataSource连接池:

          (1)SSM配置:

     1 <!-- 加密后配置自己写的解析文件 -->
     2     <bean class="com.swpu.o2o.util.EncryptPropertyPlaceholderConfigurer">
     3         <property name="locations">
     4             <list>
     5                 <!-- 需要解密的文件 -->
     6                 <value>classpath:jdbc.properties</value>
     7                 <value>classpath:redis.properties</value>
     8             </list>
     9         </property>
    10         <!-- 设置编码为UTF-8 -->
    11         <property name="fileEncoding" value="UTF-8"></property>
    12     </bean>
    View Code
     1     <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource">
     2         <!-- 配置连接池属性 -->
     3         <property name="driverClass" value="${jdbc.driver}" />
     4         <property name="jdbcUrl" value="${jdbc.url}" />
     5         <property name="user" value="${jdbc.username}" />
     6         <property name="password" value="${jdbc.password}" />
     7         <!-- c3p0连接池的私有属性 -->
     8         <property name="maxPoolSize" value="30" />
     9         <property name="minPoolSize" value="10" />
    10         <!-- 关闭连接后不自动commit -->
    11         <property name="autoCommitOnClose" value="false" />
    12         <!-- 获取连接超时时间 -->
    13         <property name="checkoutTimeout" value="10000" />
    14         <!-- 当获取连接失败重试次数 -->
    15         <property name="acquireRetryAttempts" value="2" />
    16     </bean>
    View Code

             (2)Spring Boot配置(写入Bean)

     1 package com.swpu.o2o.config.dao;
     2 
     3 import com.mchange.v2.c3p0.ComboPooledDataSource;
     4 import com.swpu.o2o.util.DESUtils;
     5 import org.mybatis.spring.annotation.MapperScan;
     6 import org.springframework.beans.factory.annotation.Value;
     7 import org.springframework.context.annotation.Bean;
     8 import org.springframework.context.annotation.Configuration;
     9 
    10 import java.beans.PropertyVetoException;
    11 
    12 /**
    13  * 配置dataSource到ioc容器里
    14  */
    15 @Configuration
    16 //配置mybatis mapper扫描路径
    17 @MapperScan("com.swpu.o2o.dao")
    18 public class DataSourceConfiguration {
    19     //通过@Value标签获取application.properties中的配置信息
    20     @Value("${jdbc.driver}")
    21     private String jdbcDriver;
    22     @Value("${jdbc.url}")
    23     private String jdbcUrl;
    24     @Value("${jdbc.username}")
    25     private String jdbcUser;
    26     @Value("${jdbc.password}")
    27     private String jdbcPassword;
    28     /**
    29      * 生成与与spring-dao.xml对应的bean dataSource
    30      */
    31     @Bean(name="dataSource")
    32     public ComboPooledDataSource createDataSource() throws PropertyVetoException {
    33         //生成dataSource实例
    34         ComboPooledDataSource dataSource=new ComboPooledDataSource();
    35         //配置相关信息(和配置文件一样)
    36         //驱动(强制异常处理,抛出去)
    37         dataSource.setDriverClass(jdbcDriver);
    38         //数据库连接url
    39         dataSource.setJdbcUrl(jdbcUrl);
    40         //用户名(解密)
    41         dataSource.setUser(DESUtils.getDecryptString(jdbcUser));
    42         //密码
    43         dataSource.setPassword(DESUtils.getDecryptString(jdbcPassword));
    44         return dataSource;
    45     }
    46 }
    View Code

         1.2创建SqlSessionFactoryBean实例(设置设置mybatis configuration扫描路径,mapper映射路径,配置扫描Dao接口包等)

          (1)SSM配置:

     1 <!-- 3.配置SqlSessionFactory对象 -->
     2     <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
     3         <!-- 注入数据库连接池 -->
     4         <property name="dataSource" ref="dataSource" />
     5         <!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
     6         <property name="configLocation" value="classpath:mybatis-config.xml" />
     7         <!-- 扫描entity包 使用别名 -->
     8         <property name="typeAliasesPackage" value="com.swpu.o2o.entity" />
     9         <!-- 扫描sql配置文件:mapper需要的xml文件 -->
    10         <property name="mapperLocations" value="classpath:mapper/*.xml" />
    11     </bean> 
    12     <!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
    13     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    14         <!-- 注入sqlSessionFactory -->
    15         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    16 
    17         <!-- 给出需要扫描Dao接口包 -->
    18         <property name="basePackage" value="com.swpu.o2o.dao" />
    19     </bean>
    View Code

          (2)Spring Boot配置:

     1 package com.swpu.o2o.config.dao;
     2 
     3 import org.mybatis.spring.SqlSessionFactoryBean;
     4 import org.springframework.beans.factory.annotation.Autowired;
     5 import org.springframework.beans.factory.annotation.Value;
     6 import org.springframework.context.annotation.Bean;
     7 import org.springframework.context.annotation.Configuration;
     8 import org.springframework.core.io.ClassPathResource;
     9 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    10 import org.springframework.core.io.support.ResourcePatternResolver;
    11 
    12 import javax.sql.DataSource;
    13 import java.io.IOException;
    14 
    15 @Configuration
    16 public class SessionFactoryConfiguration {
    17     //mybatis-config.xml配置文件路径
    18     //注意:静态(static)的变量不能直接通过@Value获取,可以通过set方法
    19     private static String mybatisConfigFile;
    20     //mybatis mapper文件所在路径
    21     private static String mapperPath;
    22 
    23     @Value("${mybatis_config_file}")
    24     public void setMybatisConfigFile(String mybatisConfigFile) {
    25         SessionFactoryConfiguration.mybatisConfigFile = mybatisConfigFile;
    26     }
    27 
    28     @Value("${mapper_path}")
    29     public void setMapperPath(String mapperPath) {
    30         SessionFactoryConfiguration.mapperPath = mapperPath;
    31     }
    32 
    33     //实体类所在package
    34     @Value("${type_alias_package}")
    35     private String typeAliasPackage;
    36     @Autowired
    37     private DataSource dataSource;
    38     /**
    39      * 创建SqlSessionFactoryBean实例,并且设置mapper映射路径
    40      * 设置dataSource数据源
    41      */
    42     @Bean(name = "sqlSessionFactory")
    43     public SqlSessionFactoryBean createSqlSessionFactoryBean() throws IOException {
    44         SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
    45         //设置mybatis configuration扫描路径
    46         sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(mybatisConfigFile));
    47         //设置mapper 扫描路径
    48         PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
    49         String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + mapperPath;
    50         sqlSessionFactoryBean.setMapperLocations(pathMatchingResourcePatternResolver.getResources(packageSearchPath));
    51         //设置dataSource
    52         sqlSessionFactoryBean.setDataSource(dataSource);
    53         //设置typeAlias包扫描路径
    54         sqlSessionFactoryBean.setTypeAliasesPackage(typeAliasPackage);
    55         return sqlSessionFactoryBean;
    56     }
    57 }
    View Code

          (3)Mybatis配置文件:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE configuration 
     3  PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
     4  "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <configuration>
     6     <!-- 配置全局属性 -->
     7     <settings>
     8         <!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 -->
     9         <setting value="true" name="useGeneratedKeys" />
    10         <!-- 使用列别名替换列名 默认:true -->
    11         <setting value="true" name="useColumnLabel" />
    12         <!-- 开启驼峰命名转换:Table{create_time} -> Entity{createTime} -->
    13         <setting value="true" name="mapUnderscoreToCamelCase" />
    14         <!-- 打印查询语句 -->
    15     </settings>
    16     
    17 </configuration>
    View Code

      2.Redis:

        (1)SSM配置:

     1 <beans xmlns="http://www.springframework.org/schema/beans"
     2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
     3     xsi:schemaLocation="http://www.springframework.org/schema/beans
     4         http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
     5         http://www.springframework.org/schema/context 
     6         http://www.springframework.org/schema/context/spring-context-3.2.xsd">
     7     <!-- Redis连接池配置 -->
     8     <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
     9         <!-- 控制一个pool能分配多少个jedis实例 -->
    10         <property name="maxTotal" value="${redis.pool.maxActive}" />
    11         <!-- 连接池中最多空闲多少个maxIdle个连接,这里为20,表示即使没有数据库连接时依然可以保持20空闲的连接,而不被清除,处于待命状态,随时连接 -->
    12         <property name="maxIdle" value="${redis.pool.maxIdle}" />
    13         <!-- 最大等待时间,当没有可用连接时,连接池等待连接被归还的最大时间(以毫秒计数),超过时间即抛出异常 -->
    14         <property name="maxWaitMillis" value="${redis.pool.maxWait}" />
    15         <!-- 在获取连接时,检查有效性 -->
    16         <property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
    17     </bean>
    18     <!-- 创建Redis连接池,并做相关配置 -->
    19     <bean id="jedisWritePool" class="com.swpu.o2o.cache.JedisPoolWriper"
    20         depends-on="jedisPoolConfig">
    21         <constructor-arg index="0" ref="jedisPoolConfig" />
    22         <constructor-arg index="1" value="${redis.hostname}" />
    23         <constructor-arg index="2" value="${redis.port}" type="int" />
    24     </bean>
    25     <!-- 创建Redis工具类,封装好Redis的连接以进行相关操作 -->
    26     <bean id="jedisUtil" class="com.swpu.o2o.cache.JedisUtil"
    27         scope="singleton">
    28         <property name="jedisPool">
    29             <ref bean="jedisWritePool" />
    30         </property>
    31     </bean>
    32     <bean id="jedisKeys" class="com.swpu.o2o.cache.JedisUtil$Keys"
    33         scope="singleton">
    34         <constructor-arg ref="jedisUtil"></constructor-arg>
    35     </bean>
    36     <bean id="jedisStrings" class="com.swpu.o2o.cache.JedisUtil$Strings"
    37         scope="singleton">
    38         <constructor-arg ref="jedisUtil"></constructor-arg>
    39     </bean>
    40     <bean id="jedisLists" class="com.swpu.o2o.cache.JedisUtil$Lists"
    41         scope="singleton">
    42         <constructor-arg ref="jedisUtil"></constructor-arg>
    43     </bean>
    44     <bean id="jedisSets" class="com.swpu.o2o.cache.JedisUtil$Sets"
    45         scope="singleton">
    46         <constructor-arg ref="jedisUtil"></constructor-arg>
    47     </bean>
    48     <bean id="jedisHash" class="com.swpu.o2o.cache.JedisUtil$Hash"
    49         scope="singleton">
    50         <constructor-arg ref="jedisUtil"></constructor-arg>
    51     </bean>
    52     
    53 </beans>    
    View Code

        (2)Spring Boot配置:

      1 package com.swpu.o2o.config.redis;
      2 
      3 import com.swpu.o2o.cache.JedisPoolWriper;
      4 import com.swpu.o2o.cache.JedisUtil;
      5 import org.springframework.beans.factory.annotation.Autowired;
      6 import org.springframework.beans.factory.annotation.Value;
      7 import org.springframework.context.annotation.Bean;
      8 import org.springframework.context.annotation.Configuration;
      9 import redis.clients.jedis.JedisPoolConfig;
     10 
     11 /**
     12  * 对应spring-redis.xml里的配置
     13  */
     14 @Configuration
     15 public class RedisConfiguration {
     16     @Value("${redis.hostname}")
     17     private String hostName;
     18     @Value("${redis.port}")
     19     private int port;
     20     @Value("${redis.pool.maxActive}")
     21     private int maxTotal;
     22     @Value("${redis.pool.maxIdle}")
     23     private int maxIdle;
     24     @Value("${redis.pool.maxWait}")
     25     private long maxWaitMillis;
     26     @Value("${redis.pool.testOnBorrow}")
     27     private boolean testOnBrrow;
     28 
     29     @Autowired
     30     private JedisPoolConfig jedisPoolConfig;
     31     @Autowired
     32     private JedisPoolWriper jedisWritePool;
     33     @Autowired
     34     private JedisUtil jedisUtil;
     35 
     36     /**
     37      * 创建redis连接池设置
     38      */
     39     @Bean(name = "jedisPoolConfig")
     40     public JedisPoolConfig createJedisPoolConfig() {
     41         JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
     42         //控制一个pool可分配给多个jedis实例
     43         jedisPoolConfig.setMaxTotal(maxTotal);
     44         //连接池中最多空闲maxIdle个连接,这里取值20
     45         //表示即使没有数据库连接时依然可以保持20空闲的连接,而不清除,随时处于待命的状态
     46         jedisPoolConfig.setMaxIdle(maxIdle);
     47         //最大等待时间:当没有可用连接时
     48         //连接池等待连接被归还的最大时间(以毫秒计数),超过时间则抛出异常
     49         jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
     50         //在获取连接的时候检查有效性
     51         jedisPoolConfig.setTestOnBorrow(testOnBrrow);
     52         return jedisPoolConfig;
     53     }
     54 
     55     /**
     56      * 创建Redis连接池,并做相关配置
     57      */
     58     @Bean(name = "jedisWritePool")
     59     public JedisPoolWriper createJedisPoolWripper() {
     60         JedisPoolWriper jedisWritePool = new JedisPoolWriper(jedisPoolConfig, hostName, port);
     61         return jedisWritePool;
     62     }
     63 
     64     /**
     65      * 创建Redis工具类,封装好Redis的连接以进行相关的操作
     66      */
     67     @Bean(name = "jedisUtil")
     68     public JedisUtil createJedisUtil() {
     69         JedisUtil jedisUtil = new JedisUtil();
     70         jedisUtil.setJedisPool(jedisWritePool);
     71         return jedisUtil;
     72     }
     73 
     74     /**
     75      * Redis的key操作
     76      */
     77     @Bean(name = "jedisKeys")
     78     public JedisUtil.Keys createJedisKeys() {
     79         //实例化内部类
     80         JedisUtil.Keys jedisKeys = jedisUtil.new Keys();
     81         return jedisKeys;
     82     }
     83 
     84     /**
     85      * Redis的String操作
     86      */
     87     @Bean(name = "jedisStrings")
     88     public JedisUtil.Strings createJedisStrings() {
     89         //实例化内部类
     90         JedisUtil.Strings jedisStrings = jedisUtil.new Strings();
     91         return jedisStrings;
     92     }
     93 
     94     /**
     95      * Redis的List操作
     96      */
     97     @Bean(name = "jedisLists")
     98     public JedisUtil.Lists createJedisLists() {
     99         //实例化内部类
    100         JedisUtil.Lists jedisLists = jedisUtil.new Lists();
    101         return jedisLists;
    102     }
    103 
    104     /**
    105      * Redis的Hash操作
    106      */
    107     @Bean(name = "jedisHash")
    108     public JedisUtil.Hash createJedisHash() {
    109         //实例化内部类
    110         JedisUtil.Hash jedisHash = jedisUtil.new Hash();
    111         return jedisHash;
    112     }
    113 
    114     /**
    115      * Redis的sets操作
    116      */
    117     @Bean(name = "jedisSets")
    118     public JedisUtil.Sets createJedisSets() {
    119         //实例化内部类
    120         JedisUtil.Sets jedisSets = jedisUtil.new Sets();
    121         return jedisSets;
    122     }
    123 
    124 
    125 
    126 }
    View Code

          JedisPool类:

     1 package com.swpu.o2o.cache;
     2 
     3 import redis.clients.jedis.JedisPool;
     4 import redis.clients.jedis.JedisPoolConfig;
     5 
     6 /**
     7  * 强指定redis的JedisPool接口构造函数,这样才能在centos成功创建jedispool
     8  * 
     9  * @author xiangze
    10  *
    11  */
    12 public class JedisPoolWriper {
    13     //连接池对象
    14     private JedisPool jedisPool;
    15 
    16     public JedisPoolWriper(final JedisPoolConfig poolConfig, final String host,
    17             final int port) {
    18         try {
    19             //通过连接池配置信息,IP,端口构造连接池对象
    20             jedisPool = new JedisPool(poolConfig, host, port);
    21         } catch (Exception e) {
    22             e.printStackTrace();
    23         }
    24     }
    25     //获取redis连接池对象
    26     public JedisPool getJedisPool() {
    27         return jedisPool;
    28     }
    29     //注入redis连接池对象
    30     public void setJedisPool(JedisPool jedisPool) {
    31         this.jedisPool = jedisPool;
    32     }
    33 
    34 }
    View Code     

    二.Service层相关(配置事务管理器,声明式事务)

      (1)SSM配置:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xmlns:tx="http://www.springframework.org/schema/tx"
     6     xsi:schemaLocation="http://www.springframework.org/schema/beans
     7     http://www.springframework.org/schema/beans/spring-beans.xsd
     8     http://www.springframework.org/schema/context
     9     http://www.springframework.org/schema/context/spring-context.xsd
    10     http://www.springframework.org/schema/tx
    11     http://www.springframework.org/schema/tx/spring-tx.xsd">
    12     <!-- 扫描service包下所有使用注解的类型 -->
    13     <context:component-scan base-package="com.swpu.o2o.service" />
    14 
    15     <!-- 配置事务管理器 -->
    16     <bean id="transactionManager"
    17         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    18         <!-- 注入数据库连接池 -->
    19         <property name="dataSource" ref="dataSource" />
    20     </bean>
    21 
    22     <!-- 配置基于注解的声明式事务 -->
    23     <tx:annotation-driven transaction-manager="transactionManager" />
    24 </beans>
    View Code

      (2)Spring Boot配置:

     1 package com.swpu.o2o.config.service;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.context.annotation.Configuration;
     5 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
     6 import org.springframework.transaction.PlatformTransactionManager;
     7 import org.springframework.transaction.annotation.EnableTransactionManagement;
     8 import org.springframework.transaction.annotation.TransactionManagementConfigurer;
     9 
    10 import javax.sql.DataSource;
    11 
    12 /**
    13  * 对应spring-service.xml里面的transactionManager
    14  * 继承transactionManagementConfigurer:不能直接加入Bean,因为开启了annotation-driven
    15  */
    16 @Configuration
    17 //首先使用注解@EnableTransactionManagement开启事务后
    18 //在Service方法上添加注解@Transactional
    19 @EnableTransactionManagement
    20 public class TransactionManageConfiguration implements TransactionManagementConfigurer {
    21     @Autowired
    22     //注入DataSourceConfiguration里面的dataSource,通过createDataSource()获取
    23     private DataSource dataSource;
    24 
    25     @Override
    26     /**
    27      * 关于事务处理,需要返回PlatformTransactionManager的实现
    28      */
    29     public PlatformTransactionManager annotationDrivenTransactionManager() {
    30         return new DataSourceTransactionManager(dataSource);
    31     }
    32 }
    View Code

    三.Controller层相关

      配置SpringMVC:

        1.开启SpringMVC注解模式;2.静态资源默认servlet配置;3.定义视图解析器;4.扫描web相关的bean;5.权限拦截器

      (1)SSM配置:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
     4     xmlns:mvc="http://www.springframework.org/schema/mvc"
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans
     6     http://www.springframework.org/schema/beans/spring-beans.xsd
     7     http://www.springframework.org/schema/context
     8     http://www.springframework.org/schema/context/spring-context.xsd
     9     http://www.springframework.org/schema/mvc
    10     http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
    11     <!-- 配置SpringMVC -->
    12     <!-- 1.开启SpringMVC注解模式 -->
    13     <!-- 简化配置: (1)自动注册DefaultAnootationHandlerMapping,AnotationMethodHandlerAdapter 
    14         (2)提供一些列:数据绑定,数字和日期的format @NumberFormat, @DateTimeFormat, xml,json默认读写支持 -->
    15     <mvc:annotation-driven />
    16 
    17     <!-- 2.静态资源默认servlet配置 (1)加入对静态资源的处理:js,gif,png (2)允许使用"/"做整体映射 -->
    18     <mvc:resources mapping="/resources/**" location="/resources/" />
    19     <mvc:default-servlet-handler />
    20 
    21     <!-- 3.定义视图解析器 -->
    22     <!-- 定制请求加头加尾 -->
    23     <bean id="viewResolver"
    24         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    25         <property name="prefix" value="/WEB-INF/html/"></property>
    26         <property name="suffix" value=".html"></property>
    27     </bean>
    28     <bean id="multipartResolver"
    29         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    30         <!-- 默认编码 -->
    31         <property name="defaultEncoding" value="utf-8"></property>
    32         <!-- 上传文件的最大 尺寸(单位是字节) -->
    33         <!-- 1024*1024*20=20971520 -->
    34         <property name="maxUploadSize" value="20971520"></property>
    35         <!-- 允许写在内存中的最大值 -->
    36         <property name="maxInMemorySize" value="20971520"></property>
    37     </bean>
    38     <!-- 4.扫描web相关的bean -->
    39     <context:component-scan base-package="com.swpu.o2o.web" />
    40     <!-- 5.权限拦截器 -->
    41     <mvc:interceptors>
    42         <!-- 校验是否登录了该管理系统的拦截器 -->
    43         <mvc:interceptor>
    44             <!-- 定义拦截的路由,shopadmin包下的所有Controller -->
    45             <mvc:mapping path="/shopadmin/**" />
    46             <!-- 拦截方法 -->
    47             <bean class="com.swpu.o2o.interceptor.shopadmin.ShopLoginInterceptor"
    48                 id="ShopInterceptor" />
    49         </mvc:interceptor>
    50         <!-- 校验是否对该店铺有操作权限的拦截器 -->
    51         <mvc:interceptor>
    52             <!-- 需要拦截的接口 -->
    53             <mvc:mapping path="/shopadmin/**" />
    54             <!-- shoplist page -->
    55             <!-- 排除该包下的某些接口不拦截 -->
    56             <mvc:exclude-mapping path="/shopadmin/shoplist" />
    57             <mvc:exclude-mapping path="/shopadmin/getshoplist" />
    58             <!-- shopmanage page -->
    59             <mvc:exclude-mapping path="/shopadmin/shopmanagement" />
    60             <mvc:exclude-mapping path="/shopadmin/getshopmanagementinfo" />
    61             <!-- shopregister page -->
    62             <mvc:exclude-mapping path="/shopadmin/getshopinitinfo" />
    63             <mvc:exclude-mapping path="/shopadmin/shopoperation" />
    64             <mvc:exclude-mapping path="/shop/registershop" />
    65             <bean class="com.swpu.o2o.interceptor.shopadmin.ShopPermissionInterceptor"
    66                 id="ShopPermissionInterceptor" />
    67         </mvc:interceptor>
    68     </mvc:interceptors>
    69 </beans>
    View Code

      (2)Spring Boot配置:

      1 package com.swpu.o2o.config.web;
      2 
      3 import com.google.code.kaptcha.servlet.KaptchaServlet;
      4 import com.swpu.o2o.interceptor.ShopLoginInterceptor;
      5 import com.swpu.o2o.interceptor.ShopPermissionInterceptor;
      6 import org.springframework.beans.BeansException;
      7 import org.springframework.beans.factory.annotation.Value;
      8 import org.springframework.boot.web.servlet.ServletRegistrationBean;
      9 import org.springframework.context.ApplicationContext;
     10 import org.springframework.context.ApplicationContextAware;
     11 import org.springframework.context.annotation.Bean;
     12 import org.springframework.context.annotation.Configuration;
     13 import org.springframework.web.multipart.commons.CommonsMultipartResolver;
     14 import org.springframework.web.servlet.ViewResolver;
     15 import org.springframework.web.servlet.config.annotation.*;
     16 import org.springframework.web.servlet.view.InternalResourceViewResolver;
     17 
     18 import javax.servlet.ServletException;
     19 
     20 /**
     21  * 开启Mvc,自动注入spring容器中
     22  * WebMvcConfigurer:配置视图解析器
     23  * 当一个类实现了接口WebMvcConfigurer,这个类就能方便的获取里面所有的bean
     24  */
     25 @Configuration
     26 //等价于<mvc:annotation-driven/>,使用Java 注解快捷配置Spring Webmvc
     27 @EnableWebMvc
     28 //实现ApplicationContextAware该接口获取Spring容器
     29 // extends WebMvcConfigurationSupport implements ApplicationContextAware
     30 public class MvcConfiguration extends WebMvcConfigurerAdapter implements ApplicationContextAware {
     31     //Spring容器
     32     private ApplicationContext applicationContext;
     33 
     34     @Override
     35     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
     36         this.applicationContext = applicationContext;
     37     }
     38 
     39     /**
     40      * 静态资源配置(docBase)
     41      *
     42      *
     43      *  @param registry
     44      */
     45     @Override
     46     public void addResourceHandlers(ResourceHandlerRegistry registry) {
     47         //拦截/resources下的请求解析到目标路径classpath:/resources
     48         //classpath表示在项目工程中找,file表示在服务器中找
     49         registry.addResourceHandler("/upload/**").addResourceLocations("file:D:/Project/image/upload/");
     50     }
     51 
     52     /**
     53      * 定义默认的请求处理器
     54      *
     55      * @param configurer
     56      */
     57     @Override
     58     public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
     59         configurer.enable();
     60     }
     61 
     62     /**
     63      * 创建viewResolver
     64      * @return
     65      */
     66     @Bean(name = "viewResolver")
     67     public ViewResolver createViewResolver() {
     68         InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
     69         //设置spring容器
     70         //viewResolver.setApplicationContext(this.applicationContext);
     71         //取消缓存
     72         viewResolver.setCache(false);
     73         //设置解析的前缀
     74         viewResolver.setPrefix("/WEB-INF/html/");
     75         //设置视图解析的后缀
     76         viewResolver.setSuffix(".html");
     77         return viewResolver;
     78     }
     79 
     80     /**
     81      * 文件上传解析器
     82      *
     83      * @return
     84      */
     85     @Bean(name = "multipartResolver")
     86     public CommonsMultipartResolver commonsMultipartResolver() {
     87         CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
     88         multipartResolver.setDefaultEncoding("utf-8");
     89         //文件大小1024*1024*20
     90         multipartResolver.setMaxUploadSize(20971520);
     91         multipartResolver.setMaxInMemorySize(20971520);
     92         return multipartResolver;
     93     }
     94     //引入验证码kaptcha相关信息
     95     @Value("${kaptcha.border}")
     96     private String border;
     97     @Value("${kaptcha.textproducer.font.color}")
     98     private String fcolor;
     99     @Value("${kaptcha.image.width}")
    100     private String width;
    101     @Value("${kaptcha.textProducer.char.string}")
    102     private String cString;
    103     @Value("${kaptcha.image.height}")
    104     private String height;
    105     @Value("${kaptcha.textproducer.font.size}")
    106     private String fsize;
    107     @Value("${kaptcha.noise.color}")
    108     private String nColor;
    109     @Value("${kaptcha.textproducer.char.length}")
    110     private String clength;
    111     @Value("${kaptcha.textproducer.font.names}")
    112     private String fnames;
    113 
    114     /**
    115      * web.xml不生效了,在这里配置Kaptcha验证码Servlet
    116      * @return
    117      */
    118     @Bean
    119     public ServletRegistrationBean servletRegistrationBean() throws ServletException {
    120         ServletRegistrationBean servlet=new ServletRegistrationBean(new KaptchaServlet(),"/Kaptcha");
    121         servlet.addInitParameter("kaptcha.border",border);//无边框
    122         servlet.addInitParameter("kaptcha.textproducer.font.color",fcolor);//字体颜色
    123         servlet.addInitParameter("kaptcha.image.width",width);//图片宽度
    124         servlet.addInitParameter("kaptcha.textProducer.char.string",cString);//使用哪些字体
    125         servlet.addInitParameter("kaptcha.image.height",height);//图片高度
    126         servlet.addInitParameter("kaptcha.textproducer.font.size",fsize);//字体大小
    127         servlet.addInitParameter("kaptcha.noise.color",nColor);//干扰线颜色
    128         servlet.addInitParameter("kaptcha.textproducer.char.length",clength);//字符个数
    129         servlet.addInitParameter("kaptcha.textproducer.font.names",fnames);//字体
    130         return servlet;
    131 
    132     }
    133 
    134     /**
    135      * 拦截器
    136      * @param registry
    137      */
    138     @Override
    139     public void addInterceptors(InterceptorRegistry registry) {
    140         String interceptPath="/shopadmin/**";
    141         //注册拦截器(验证是否登录)
    142         InterceptorRegistration loginIR=registry.addInterceptor(new ShopLoginInterceptor());
    143         //配置拦截器路径
    144         loginIR.addPathPatterns(interceptPath);
    145         //注册拦截器(验证是否具有权限)
    146         InterceptorRegistration permissionIR=registry.addInterceptor(new ShopPermissionInterceptor());
    147         //配置拦截器路径
    148         permissionIR.addPathPatterns(interceptPath);
    149         //配置不拦截的路径
    150         permissionIR.excludePathPatterns("/shopadmin/shoplist");
    151         permissionIR.excludePathPatterns("/shopadmin/getshoplist");
    152         permissionIR.excludePathPatterns("/shopadmin/registershop");
    153         permissionIR.excludePathPatterns("/shopadmin/shopoperation");
    154         permissionIR.excludePathPatterns("/shopadmin/shopmanagement");
    155         permissionIR.excludePathPatterns("/shopadmin/getshopmanagementinfo");
    156     }
    157 }
    View Code 

       注:WebMvcConfigurerAdapter在Spring Boot2.0就已经过时,不推荐使用,可以继承WebMvcConfigurationSupport。该类包含了WebMvcConfigurerAdapter的所有方法。

  • 相关阅读:
    Automatic Setup of a Humanoid
    SLAM——视觉里程计(一)feature
    JSP和EL和JSTL
    rework-发出你的心声
    bootstrap单选框复选框的使用
    bootstrap输入框组
    vue中改变数组或对象,页面没做出对应的渲染
    bootstrap面板的使用
    bootstrap列表组的使用
    bootstrap表格的使用
  • 原文地址:https://www.cnblogs.com/lyq-biu/p/11041007.html
Copyright © 2020-2023  润新知