Sprigmvc项目转为springboot的方法

是否有老掉牙的springmvc项目,想转成springboot项目,看这个文章就对了。

说明

如果你的项目连maven项目都不是,请自行转为maven项目,在按照本教程进行。

本教程适用于spring+springmvc+mybatis+shiro的maven项目。

1.修改pom文件依赖

删除之前的spring依赖,添加springboot依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>
<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>

      <!-- 这个是剔除掉自带的 tomcat部署的-->
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
      </exclusions>

    </dependency>
    <!-- tomcat容器部署 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <!--<scope>compile</scope>-->
    </dependency>
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.0</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <optional>true</optional>
    </dependency>
    <!-- 支持 @ConfigurationProperties 注解 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>
 <dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-jasper</artifactId>
 </dependency>
</dependencies>

添加springboot构建插件

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>1.7</source>
      <target>1.7</target>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>1.5.9.RELEASE</version>
    <executions>
      <execution>
        <goals>
          <goal>repackage</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>

2.添加application启动文件

注意,如果Application在controller,service,dao的上一层包里,无需配置 @ComponentScan ,

否则,需要指明要扫描的包。

@SpringBootApplication
//@ComponentScan({"com.cms.controller","com.cms.service","com.cms.dao"})
public class Applicationextends SpringBootServletInitializer{

  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
    return application.sources(Application.class);
  }

  public static void main(String[] args)throws Exception {
    SpringApplication.run(Application.class, args);
  }
}

3.添加springboot配置文件

在resources下面添加application.properties文件

添加基本配置
#默认前缀
server.contextPath=/
# 指定环境
spring.profiles.active=local
# jsp配置
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
#log配置文件
logging.config=classpath:logback-cms.xml
#log路径
logging.path=/Users/mac/work-tommy/cms-springboot/logs/
#数据源
spring.datasource.name=adminDataSource
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/mycms?useUnicode=true&autoReconnect=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = 123456

4.使用@Configuration注入配置

注入mybatis配置,分页插件请自主选择

@Configuration
@MapperScan(basePackages = "com.kuwo.dao",sqlSessionTemplateRef = "adminSqlSessionTemplate")
public class AdminDataSourceConfig{

  @Bean(name = "adminDataSource")
  @ConfigurationProperties(prefix = "spring.datasource")
  @Primary
  public DataSource adminDataSource(){
    return DataSourceBuilder.create().build();
  }

  @Bean(name = "adminSqlSessionFactory")
  @Primary
  public SqlSessionFactory adminSqlSessionFactory(@Qualifier("adminDataSource")DataSource dataSource)throws Exception {
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(dataSource);
    //分页插件
// PageHelper pageHelper = new PageHelper();
    PagePlugin pagePlugin = new PagePlugin();
// Properties props = new Properties();
// props.setProperty("reasonable", "true");
// props.setProperty("supportMethodsArguments", "true");
// props.setProperty("returnPageInfo", "check");
// props.setProperty("params", "count=countSql");
// pageHelper.setProperties(props);
    //添加插件
    bean.setPlugins(new Interceptor[]{pagePlugin});
    // 添加mybatis配置文件
    bean.setConfigLocation(new DefaultResourceLoader().getResource("classpath:mybatis/mybatis-config.xml"));
    // 添加mybatis映射文件
    bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/system/*.xml"));
    return bean.getObject();
  }

  @Bean(name = "adminTransactionManager")
  @Primary
  public DataSourceTransactionManager adminTransactionManager(@Qualifier("adminDataSource")DataSource dataSource){
    return new DataSourceTransactionManager(dataSource);
  }

  @Bean(name = "adminSqlSessionTemplate")
  @Primary
  public SqlSessionTemplate adminSqlSessionTemplate(@Qualifier("adminSqlSessionFactory")SqlSessionFactory sqlSessionFactory)throws Exception {
    return new SqlSessionTemplate(sqlSessionFactory);
  }
}

添加Interceptor配置,注意addInterceptor的顺序,不要搞乱了

@Configuration
public class InterceptorConfigurationextends WebMvcConfigurerAdapter{
  @Override
  public void addInterceptors(InterceptorRegistry registry){
    registry.addInterceptor(new LoginHandlerInterceptor());
  }
}

添加shiro配置文件

注意:本来使用redis做session缓存,但是和shiro集成发现一个问题,user对象存储以后,从shiro中获取后,无法进行类型转换,所以暂时放弃了redis做session缓存。

@Configuration
public class ShiroConfiguration{
  @Value("${spring.redis.host}")
  private String host;

  @Value("${spring.redis.port}")
  private int port;

  @Value("${spring.redis.timeout}")
  private int timeout;
  @Bean
  public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor(){
    return new LifecycleBeanPostProcessor();
  }

  /**
   * ShiroFilterFactoryBean 处理拦截资源文件问题。
   * 注意:单独一个ShiroFilterFactoryBean配置是或报错的,因为在
   * 初始化ShiroFilterFactoryBean的时候需要注入:SecurityManager
   *
   Filter Chain定义说明
   1、一个URL可以配置多个Filter,使用逗号分隔
   2、当设置多个过滤器时,全部验证通过,才视为通过
   3、部分过滤器可指定参数,如perms,roles
   *
   */
  @Bean
  public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager){
    System.out.println("ShiroConfiguration.shirFilter()");
    ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();

    // 必须设置 SecurityManager
    shiroFilterFactoryBean.setSecurityManager(securityManager);
    // 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面
    shiroFilterFactoryBean.setLoginUrl("/login_toLogin");
    // 登录成功后要跳转的链接
    shiroFilterFactoryBean.setSuccessUrl("/usersPage");
    //未授权界面;
    shiroFilterFactoryBean.setUnauthorizedUrl("/403");
    //拦截器.
    Map<String,String> filterChainDefinitionMap = new LinkedHashMap<>();

    //配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了
    filterChainDefinitionMap.put("/logout", "logout");
    filterChainDefinitionMap.put("/login_toLogin", "anon");
    filterChainDefinitionMap.put("/login_login", "anon");
    filterChainDefinitionMap.put("/static/login/**","anon");
    filterChainDefinitionMap.put("/static/js/**","anon");
    filterChainDefinitionMap.put("/uploadFiles/uploadImgs/**","anon");
    filterChainDefinitionMap.put("/code.do","anon");
    filterChainDefinitionMap.put("/font-awesome/**","anon");
    //<!-- 过滤链定义,从上向下顺序执行,一般将 /**放在最为下边 -->:这是一个坑呢,一不小心代码就不好使了;
    //<!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问-->

    filterChainDefinitionMap.put("/**", "authc");

    shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
    return shiroFilterFactoryBean;
  }

  @Bean
  public SecurityManager securityManager(){
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
    //设置realm.
    securityManager.setRealm(myShiroRealm());
    // 自定义缓存实现 使用redis
    //securityManager.setCacheManager(cacheManager());
    // 自定义session管理 使用redis
    securityManager.setSessionManager(sessionManager());
    return securityManager;
  }

  @Bean
  public ShiroRealm myShiroRealm(){
    ShiroRealm myShiroRealm = new ShiroRealm();
// myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher());
    return myShiroRealm;
  }

}
  /**
   * 开启shiro aop注解支持.
   * 使用代理方式;所以需要开启代码支持;
   * @param securityManager
   * @return
   */
  @Bean
  public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){
    AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
    authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
    return authorizationAttributeSourceAdvisor;
  }

  /**
   * 配置shiro redisManager
   * 使用的是shiro-redis开源插件
   * @return
   */
  public RedisManager redisManager(){
    RedisManager redisManager = new RedisManager();
    redisManager.setHost(host);
    redisManager.setPort(port);
    redisManager.setExpire(1800);
    redisManager.setTimeout(timeout);
    // redisManager.setPassword(password);
    return redisManager;
  }

  /**
   * cacheManager 缓存 redis实现
   * 使用的是shiro-redis开源插件
   * @return
   */
  public RedisCacheManager cacheManager(){
    RedisCacheManager redisCacheManager = new RedisCacheManager();
    redisCacheManager.setRedisManager(redisManager());
    return redisCacheManager;
  }

  /**
   * RedisSessionDAO shiro sessionDao层的实现 通过redis
   * 使用的是shiro-redis开源插件
   */
  @Bean
  public RedisSessionDAO redisSessionDAO(){
    RedisSessionDAO redisSessionDAO = new RedisSessionDAO();
    redisSessionDAO.setRedisManager(redisManager());
    return redisSessionDAO;
  }

  @Bean
  public DefaultWebSessionManager sessionManager(){
    DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
// sessionManager.setSessionDAO(redisSessionDAO());
    return sessionManager;
  }

}

总结

搞了一天时间把项目转成springboot,查阅各种资料,希望这篇文章能够为你带来帮助。也希望大家多多支持我们。

(0)

相关推荐

  • SpringMVC拦截器实现登录认证

    博客以Demo的形式讲诉拦截器的使用 项目结构如图: 需要的jar:有springMVC配置需要的jar和jstl需要的jar SpringMVC包的作用说明: aopalliance.jar:这个包是AOP联盟的API包,里面包含了针对面向切面的接口.通常spring等其它具备动态织入功能的框架依赖这个jar spring-core.jar:这个jar 文件包含Spring 框架基本的核心工具类.Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统

  • springboot实现拦截器之验证登录示例

    整理文档,搜刮出一个springboot实现拦截器之验证登录示例,稍微整理精简一下做下分享. 添加jar包,这个jar包不是必须的,只是在拦截器里用到了,如果不用的话,完全可以不引入 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.5</version> </dep

  • 从SpringMVC迁移到Springboot的方法步骤

    在将SpringMVC项目转移到Springboot上的过程中,主要做了以下的事情 Profile配置 全局变量从properties文件读入 数据源与Mybatis配置 日志文件配置 WebConfig配置(包括原有的web.xml和spring-mvc.xml) 去掉多余的bean注入 本篇文章除了介绍做了些什么和怎么做之外,会多很多多余的废话,关于对原理的一些探讨,知其然也要知其所以然. Profile配置 在传统的Spring项目中,多个profile的配置方式首先是在pom.xml文件

  • 基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询

    前言 基于SpringMVC+Bootstrap+DataTables实现数据表格服务端分页.模糊查询(非DataTables Search),页面异步刷新. 说明:sp:message标签是使用了SpringMVC国际化 效果 DataTable表格 关键字查询 自定义关键字查询,非DataTable Search 代码 HTML代码 查询条件代码 <!-- 查询.添加.批量删除.导出.刷新 --> <div class="row-fluid"> <di

  • SpringMVC拦截器——实现登录验证拦截器的示例代码

    本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现 当用户点击到网站主页时要进行拦截,用户登录了才能进入网站主页,否则进入登陆页面 核心代码 首先是index.jsp,显示链接 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String bas

  • springboot+springmvc实现登录拦截

    这篇文章主要介绍了springboot+springmvc实现登录拦截,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 LoginInterceptor 实现 HandlerInterceptor 接口,自定义拦截器处理方法 LoginConfiguration 实现 WebMvcConfigurer 接口,注册拦截器 ResourceBundle 加载 properties文件数据,配置不进行拦截的路径 LoginInterceptor pac

  • IDEA上面搭建一个SpringBoot的web-mvc项目遇到的问题

    这几天一直在研究IDEA上面怎么搭建一个web-mvc的SpringBoot项目,看网上的教程一步步的搭建,可是还是出现一堆的问题. 为了让大家以后少走一些弯路,我在这里分享一下我这几天研究的成果,也希望对大家能有所帮助. 这里先介绍一下各种环境的配置信息:idea2016.2.1  jdk1.8.0_31 因为SpringBoot中是内置tomcat的,所以也就不需要额外的tomcat配置了,现在开始讲如何在idea上面搭建SpringBoot web-mvc项目了 步骤一:在IDEA中新建一

  • springboot+springmvc+mybatis项目整合

    介绍: 上篇给大家介绍了ssm多模块项目的搭建,在搭建过程中spring整合springmvc和mybatis时会有很多的东西需要我们进行配置,这样不仅浪费了时间,也比较容易出错,由于这样问题的产生,Pivotal团队提供了一款全新的框架,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者. 特点: 1. 创建独立的Spring应用

  • Sprigmvc项目转为springboot的方法

    是否有老掉牙的springmvc项目,想转成springboot项目,看这个文章就对了. 说明 如果你的项目连maven项目都不是,请自行转为maven项目,在按照本教程进行. 本教程适用于spring+springmvc+mybatis+shiro的maven项目. 1.修改pom文件依赖 删除之前的spring依赖,添加springboot依赖 <parent> <groupId>org.springframework.boot</groupId> <arti

  • IDEA项目使用SpringBoot+MyBatis-Plus的方法

    步骤如下: 1.打开IDEA 2.File->new-> project 3.选择spring initializr->Next 4.填写Grouphe和Artifact,选择Java version: 8 ,点击next ,如图: 5.选择对应的依赖,点击Next 6.核对项目的名字是否一致,点击finish后就完成了工程的创建. 7.接下来就是pom文件的依赖包引入了(很重要!!!) <dependency> <groupId>org.springframew

  • docker安装tomcat并部署Springboot项目war包的方法

    说来也简单,直接上教程吧,博主 1.首先在启动docker service docker start 2.拉取tomcat镜像. docker pull tomcat:8-jdk8 如果不加后面的8-jdk8  标签的话,会默认拉取latest,也就是最新的官方版本 3.安装完成后,做作容器,并启动tomcat docker run --name tomcat -p 8080:8080 如果正常安装后访问ip+端口出现404情况,进入tomcat目录,把原有webapps目录删除,并把webap

  • springboot项目快速搭建的方法步骤

    1. 问题描述 springboot的面世,成为Java开发者的一大福音,大大提升了开发的效率,其实springboot只是在maven的基础上,对已有的maven gav进行了封装而已,今天用最简单的代码快速入门springboot. 2. 解决方案 强烈推荐大家使用Idea的付费版(破解感谢下蓝宇),Idea对maven.git等插件支持的更加好. 使用idea自带的spring Initializr(实际调用的是springboot的官网上的initializr),快速新建springbo

  • SpringBoot项目集成FTP的方法步骤

    目录 写在前面 FTP相关软件安装 开始集成 引入相关jar包 引入FTPUtils.java和FTPHelper.java 如何使用 写在前面 FTP是一个文件传输协议,被开发人员广泛用于在互联网中文件传输的一套标准协议. 而我们通常在开发过程中也要通过FTP来搭建文件系统,用于存储系统文件等. 目前正值SpringBoot热潮,所以我们接下来会一起学习一下SpringBoot如何集成FTP,以及相关的FTP组件包,还有其主要提供的几个方法. 当然在这系列文章结尾,我们还会给出确切的FTP操作

  • springboot项目启动后执行方法的三种方式

    目录 1 方法 方法1:spring的ApplicationListener< ContextRefreshedEvent>接口 方法2:springboot的ApplicationRunner接口 方法3:springboot的CommandLineRunner接口 2 指定执行顺序 3 原理 springboot项目启动后执行方法,有三种实现方式. 1 方法 ApplicationListener< ContextRefreshedEvent> 不推荐 ApplicationL

  • JWT整合Springboot的方法步骤

    目录 1.基于JWT认证 1.1 认证流程 1.2 JWT优势 1.3 JWT的结构是什么 2.使用JWT 3.整合Springboot 1.基于JWT认证 1.1 认证流程 首先,前端通过Web表单将自己的用户名和密码发送到后端的接口.这一过程一般是一个HTTP POST请求.建议的方式是通过SSL加密的传输(https协议),从而避免敏感信息被嗅探. 后端核对用户名和密码成功后,将用户的id等其他信息作为JWT Payload(负载),将其与头部分别进行Base64编码拼接后签名,形成一个J

  • Storm框架整合springboot的方法

    Storm:最火的流式处理框架 伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样.更加便捷,同时对于信息的时效性要求也越来越高.举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这个宝贝马上就可以被卖家搜索出来.点击.购买啦,相反,如果这个宝贝要等到第二天或者更久才可以被搜出来,估计这个大哥就要骂娘了.再举一个推荐的例子,如果用户昨天在淘宝上买了一双袜子,今天想买一副泳镜去游泳,但是却发现系统在不遗余力地给他推荐袜子.鞋子,根本对他今天寻找泳镜

  • Java Spring项目国际化(i18n)详细方法与实例

    Spring国际化概述 国际化基本规则 国际化信息"也称为"本地化信息",一般需要两个条件才可以确定一个特定类型的本地化信息,它们分别是"语言类型"和"国家/地区的类型".如中文本地化信息既有中国大陆地区的中文,又有中国台湾.中国香港地区的中文,还有新加坡地区的中文.Java通过java.util.Locale类表示一个本地化对象,它允许通过语言参数和国家/地区参数创建一个确定的本地化对象. 语言参数使用ISO标准语言代码表示,这些代码

  • Spring Boot Admin 进行项目监控管理的方法

    一.Spring Boot Admin 的概念 Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序. 应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册(通过HTTP)或使用SpringCloud注册中心(例如Eureka,Consul)发现. UI是AngularJs的应用程序,展示Spring Boot Admin Client的Actuator端点上的一些监控.        可

随机推荐