Sprigmvc项目转为springboot的方法
是否有老掉牙的springmvc项目,想转成springboot项目,看这个文章就对了。
说明
如果你的项目连maven项目都不是,请自行转为maven项目,在按照本教程进行。
本教程适用于spring+springmvc+mybatis+shiro的maven项目。
1.修改pom文件依赖
删除之前的spring依赖,添加springboot依赖
org.springframework.boot spring-boot-starter-parent 1.5.9.RELEASE org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-tomcat org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.0 org.springframework.boot spring-boot-devtools true org.springframework.boot spring-boot-configuration-processor true org.apache.tomcat.embed tomcat-embed-jasper
添加springboot构建插件
org.apache.maven.plugins maven-compiler-plugin 1.7 1.7 org.springframework.boot spring-boot-maven-plugin 1.5.9.RELEASE repackage
2.添加application启动文件
注意,如果Application在controller,service,dao的上一层包里,无需配置@ComponentScan,
否则,需要指明要扫描的包。
@SpringBootApplication
//@ComponentScan({"com.cms.controller","com.cms.service","com.cms.dao"})
publicclassApplicationextendsSpringBootServletInitializer{
@Override
protectedSpringApplicationBuilderconfigure(SpringApplicationBuilderapplication){
returnapplication.sources(Application.class);
}
publicstaticvoidmain(String[]args)throwsException{
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")
publicclassAdminDataSourceConfig{
@Bean(name="adminDataSource")
@ConfigurationProperties(prefix="spring.datasource")
@Primary
publicDataSourceadminDataSource(){
returnDataSourceBuilder.create().build();
}
@Bean(name="adminSqlSessionFactory")
@Primary
publicSqlSessionFactoryadminSqlSessionFactory(@Qualifier("adminDataSource")DataSourcedataSource)throwsException{
SqlSessionFactoryBeanbean=newSqlSessionFactoryBean();
bean.setDataSource(dataSource);
//分页插件
//PageHelperpageHelper=newPageHelper();
PagePluginpagePlugin=newPagePlugin();
//Propertiesprops=newProperties();
//props.setProperty("reasonable","true");
//props.setProperty("supportMethodsArguments","true");
//props.setProperty("returnPageInfo","check");
//props.setProperty("params","count=countSql");
//pageHelper.setProperties(props);
//添加插件
bean.setPlugins(newInterceptor[]{pagePlugin});
//添加mybatis配置文件
bean.setConfigLocation(newDefaultResourceLoader().getResource("classpath:mybatis/mybatis-config.xml"));
//添加mybatis映射文件
bean.setMapperLocations(newPathMatchingResourcePatternResolver().getResources("classpath:mybatis/system/*.xml"));
returnbean.getObject();
}
@Bean(name="adminTransactionManager")
@Primary
publicDataSourceTransactionManageradminTransactionManager(@Qualifier("adminDataSource")DataSourcedataSource){
returnnewDataSourceTransactionManager(dataSource);
}
@Bean(name="adminSqlSessionTemplate")
@Primary
publicSqlSessionTemplateadminSqlSessionTemplate(@Qualifier("adminSqlSessionFactory")SqlSessionFactorysqlSessionFactory)throwsException{
returnnewSqlSessionTemplate(sqlSessionFactory);
}
}
添加Interceptor配置,注意addInterceptor的顺序,不要搞乱了
@Configuration
publicclassInterceptorConfigurationextendsWebMvcConfigurerAdapter{
@Override
publicvoidaddInterceptors(InterceptorRegistryregistry){
registry.addInterceptor(newLoginHandlerInterceptor());
}
}
添加shiro配置文件
注意:本来使用redis做session缓存,但是和shiro集成发现一个问题,user对象存储以后,从shiro中获取后,无法进行类型转换,所以暂时放弃了redis做session缓存。
@Configuration
publicclassShiroConfiguration{
@Value("${spring.redis.host}")
privateStringhost;
@Value("${spring.redis.port}")
privateintport;
@Value("${spring.redis.timeout}")
privateinttimeout;
@Bean
publicstaticLifecycleBeanPostProcessorgetLifecycleBeanPostProcessor(){
returnnewLifecycleBeanPostProcessor();
}
/**
*ShiroFilterFactoryBean处理拦截资源文件问题。
*注意:单独一个ShiroFilterFactoryBean配置是或报错的,因为在
*初始化ShiroFilterFactoryBean的时候需要注入:SecurityManager
*
FilterChain定义说明
1、一个URL可以配置多个Filter,使用逗号分隔
2、当设置多个过滤器时,全部验证通过,才视为通过
3、部分过滤器可指定参数,如perms,roles
*
*/
@Bean
publicShiroFilterFactoryBeanshiroFilter(SecurityManagersecurityManager){
System.out.println("ShiroConfiguration.shirFilter()");
ShiroFilterFactoryBeanshiroFilterFactoryBean=newShiroFilterFactoryBean();
//必须设置SecurityManager
shiroFilterFactoryBean.setSecurityManager(securityManager);
//如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面
shiroFilterFactoryBean.setLoginUrl("/login_toLogin");
//登录成功后要跳转的链接
shiroFilterFactoryBean.setSuccessUrl("/usersPage");
//未授权界面;
shiroFilterFactoryBean.setUnauthorizedUrl("/403");
//拦截器.
MapfilterChainDefinitionMap=newLinkedHashMap<>();
//配置退出过滤器,其中的具体的退出代码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");
//:这是一个坑呢,一不小心代码就不好使了;
//
filterChainDefinitionMap.put("/**","authc");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
returnshiroFilterFactoryBean;
}
@Bean
publicSecurityManagersecurityManager(){
DefaultWebSecurityManagersecurityManager=newDefaultWebSecurityManager();
//设置realm.
securityManager.setRealm(myShiroRealm());
//自定义缓存实现使用redis
//securityManager.setCacheManager(cacheManager());
//自定义session管理使用redis
securityManager.setSessionManager(sessionManager());
returnsecurityManager;
}
@Bean
publicShiroRealmmyShiroRealm(){
ShiroRealmmyShiroRealm=newShiroRealm();
//myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher());
returnmyShiroRealm;
}
}
/**
*开启shiroaop注解支持.
*使用代理方式;所以需要开启代码支持;
*@paramsecurityManager
*@return
*/
@Bean
publicAuthorizationAttributeSourceAdvisorauthorizationAttributeSourceAdvisor(SecurityManagersecurityManager){
AuthorizationAttributeSourceAdvisorauthorizationAttributeSourceAdvisor=newAuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
returnauthorizationAttributeSourceAdvisor;
}
/**
*配置shiroredisManager
*使用的是shiro-redis开源插件
*@return
*/
publicRedisManagerredisManager(){
RedisManagerredisManager=newRedisManager();
redisManager.setHost(host);
redisManager.setPort(port);
redisManager.setExpire(1800);
redisManager.setTimeout(timeout);
//redisManager.setPassword(password);
returnredisManager;
}
/**
*cacheManager缓存redis实现
*使用的是shiro-redis开源插件
*@return
*/
publicRedisCacheManagercacheManager(){
RedisCacheManagerredisCacheManager=newRedisCacheManager();
redisCacheManager.setRedisManager(redisManager());
returnredisCacheManager;
}
/**
*RedisSessionDAOshirosessionDao层的实现通过redis
*使用的是shiro-redis开源插件
*/
@Bean
publicRedisSessionDAOredisSessionDAO(){
RedisSessionDAOredisSessionDAO=newRedisSessionDAO();
redisSessionDAO.setRedisManager(redisManager());
returnredisSessionDAO;
}
@Bean
publicDefaultWebSessionManagersessionManager(){
DefaultWebSessionManagersessionManager=newDefaultWebSessionManager();
//sessionManager.setSessionDAO(redisSessionDAO());
returnsessionManager;
}
}
总结
搞了一天时间把项目转成springboot,查阅各种资料,希望这篇文章能够为你带来帮助。也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。