Sprigmvc项目转为springboot的方法

网友投稿 649 2023-02-18


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"})

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

phttp://ublic SqlSessionFactory adminSqlSessionFactory(@Qualifier("adminDataSource")DataSource dataSource)throws Exception {

SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

bean.setDatahttp://Source(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 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");

//:这是一个坑呢,一不小心代码就不好使了;

//

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;

}

}

总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:局域网共享文件夹设置干货(局域网共享文件夹怎么做)
下一篇:在线接口api文档(在线api接口文档系统)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~