成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

springmvc項目轉(zhuǎn)為springboot

wqj97 / 1002人閱讀

摘要:說明如果你的項目連項目都不是,請自行轉(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
            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");
        //攔截器.
        Map filterChainDefinitionMap = 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

相關(guān)文章

  • SpringBootSpringMVC

    摘要:概述用久了,深受其約定大于配置的便利性毒害之后,我想回歸到時代,看看開發(fā)模式中用戶是如何參與的。備注當(dāng)然本文所使用的全是非注解的配置方法,即需要在中進(jìn)行配置并且需要遵循各種實現(xiàn)原則。而更加通用主流的基于注解的配置方法將在后續(xù)文章中詳述。 showImg(https://segmentfault.com/img/remote/1460000015244684); 概述 用久了Sprin...

    xavier 評論0 收藏0
  • Java后端

    摘要:,面向切面編程,中最主要的是用于事務(wù)方面的使用。目標(biāo)達(dá)成后還會有去構(gòu)建微服務(wù),希望大家多多支持。原文地址手把手教程優(yōu)雅的應(yīng)用四手把手實現(xiàn)后端搭建第四期 SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Spring 兩大核心之 AOP 學(xué)習(xí) | 掘金技術(shù)征文 原本地址:SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Sp...

    joyvw 評論0 收藏0
  • 慕課網(wǎng)_《2小時學(xué)會SpringBoot》學(xué)習(xí)總結(jié)

    摘要:小時學(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é)示...

    aisuhua 評論0 收藏0
  • springboot學(xué)習(xí)(二)——springmvc配置使用

    摘要:中添加攔截器配置如下攔截所有請求,也就是,只攔截開頭的請求。在中并沒有提供配置文件的方式來配置攔截器,因此需要使用的代碼式配置,配置如下這個屬性通常并不需要手動配置,高版本的會自動檢測第四點講下靜態(tài)資源映射。 以下內(nèi)容,如有問題,煩請指出,謝謝 上一篇講解了springboot的helloworld部分,這一篇開始講解如何使用springboot進(jìn)行實際的應(yīng)用開發(fā),基本上尋著sprin...

    hiyayiji 評論0 收藏0
  • 第三十六章:基于SpringBoot架構(gòu)重寫SpringMVC請求參數(shù)裝載

    摘要:本章目標(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ā)布...

    Ali_ 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<