摘要:說明如果你的項目連項目都不是,請自行轉(zhuǎn)為項目,在按照本教程進(jìn)行。本教程適用于的項目。處理攔截資源文件問題。
說明
如果你的項目連maven項目都不是,請自行轉(zhuǎn)為maven項目,在按照本教程進(jìn)行。
本教程適用于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構(gòu)建插件
org.apache.maven.plugins maven-compiler-plugin 1.7 org.springframework.boot spring-boot-maven-plugin 1.5.9.RELEASE repackage
添加application啟動文件 注意,如果Application在controller,service,dao的上一層包里,無需配置 @ComponentScan,
否則,需要指明要掃描的包。
@SpringBootApplication //@ComponentScan({"com.cms.controller","com.cms.service","com.cms.dao"}) public class Application extends 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); } }
添加springboot配置文件
在resources下面添加application.properties文件
添加基本配置
#默認(rèn)前綴 server.contextPath=/ # 指定環(huán)境 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/ #數(shù)據(jù)源 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
使用@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 InterceptorConfiguration extends WebMvcConfigurerAdapter{ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginHandlerInterceptor()); } }
添加shiro配置文件
注意:本來使用redis做session緩存,但是和shiro集成發(fā)現(xiàn)一個問題,user對象存儲以后,從shiro中獲取后,無法進(jìn)行類型轉(zhuǎn)換,所以暫時放棄了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、當(dāng)設(shè)置多個過濾器時,全部驗證通過,才視為通過 3、部分過濾器可指定參數(shù),如perms,roles * */ @Bean public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager){ System.out.println("ShiroConfiguration.shirFilter()"); ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); // 必須設(shè)置 SecurityManager shiroFilterFactoryBean.setSecurityManager(securityManager); // 如果不設(shè)置默認(rèn)會自動尋找Web工程根目錄下的"/login.jsp"頁面 shiroFilterFactoryBean.setLoginUrl("/login_toLogin"); // 登錄成功后要跳轉(zhuǎn)的鏈接 shiroFilterFactoryBean.setSuccessUrl("/usersPage"); //未授權(quán)界面; shiroFilterFactoryBean.setUnauthorizedUrl("/403"); //攔截器. MapfilterChainDefinitionMap = new LinkedHashMap<>(); //配置退出 過濾器,其中的具體的退出代碼Shiro已經(jīng)替我們實現(xiàn)了 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(); //設(shè)置realm. securityManager.setRealm(myShiroRealm()); // 自定義緩存實現(xiàn) 使用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實現(xiàn) * 使用的是shiro-redis開源插件 * @return */ public RedisCacheManager cacheManager() { RedisCacheManager redisCacheManager = new RedisCacheManager(); redisCacheManager.setRedisManager(redisManager()); return redisCacheManager; } /** * RedisSessionDAO shiro sessionDao層的實現(xiàn) 通過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; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75467.html
摘要:概述用久了,深受其約定大于配置的便利性毒害之后,我想回歸到時代,看看開發(fā)模式中用戶是如何參與的。備注當(dāng)然本文所使用的全是非注解的配置方法,即需要在中進(jìn)行配置并且需要遵循各種實現(xiàn)原則。而更加通用主流的基于注解的配置方法將在后續(xù)文章中詳述。 showImg(https://segmentfault.com/img/remote/1460000015244684); 概述 用久了Sprin...
摘要:小時學(xué)會學(xué)習(xí)總結(jié)時間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學(xué)示例源碼暫無。數(shù)據(jù)庫操作下第六章事務(wù)管理事務(wù)管理只有查詢的時候不加事務(wù),其它任何操作都要加事務(wù)。第七章課程回顧課程回顧總結(jié)介紹安裝配置的使用數(shù)據(jù)庫操作 《2小時學(xué)會SpringBoot》學(xué)習(xí)總結(jié) 時間:2017年2月18日星期六說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示...
摘要:中添加攔截器配置如下攔截所有請求,也就是,只攔截開頭的請求。在中并沒有提供配置文件的方式來配置攔截器,因此需要使用的代碼式配置,配置如下這個屬性通常并不需要手動配置,高版本的會自動檢測第四點講下靜態(tài)資源映射。 以下內(nèi)容,如有問題,煩請指出,謝謝 上一篇講解了springboot的helloworld部分,這一篇開始講解如何使用springboot進(jìn)行實際的應(yīng)用開發(fā),基本上尋著sprin...
摘要:本章目標(biāo)根據(jù)項目定制參數(shù)狀態(tài)并了解的裝載過程以及實現(xiàn)方式。創(chuàng)建測試控制器創(chuàng)建名為的控制器并添加數(shù)據(jù)提交的方法,具體代碼如下所示表單提交控制器恒宇少年碼云裝載參數(shù)測試教師名稱, 在國內(nèi)企業(yè)開發(fā)項目中大多數(shù)都已經(jīng)偏向Spring家族式的開發(fā)風(fēng)格,在前幾年國內(nèi)項目都是以Structs2作為Web開發(fā)的主導(dǎo),不過由于近幾年發(fā)生的事情確實讓開發(fā)者對它失去了以往的信心。與此同時Spring家族發(fā)布...
閱讀 2788·2021-10-14 09:42
閱讀 843·2021-10-11 10:57
閱讀 788·2019-08-30 15:54
閱讀 1931·2019-08-30 13:50
閱讀 1697·2019-08-30 11:19
閱讀 947·2019-08-29 12:38
閱讀 1439·2019-08-26 11:51
閱讀 1405·2019-08-26 10:48