Y a-t-il un ancien projet SpringMVC? Si vous souhaitez le convertir en un projet Springboot, lisez simplement cet article.
illustrer
Si votre projet n'est même pas un projet Maven, veuillez le convertir par vous-même en un projet Maven et suivre ce tutoriel.
Ce tutoriel convient au projet Maven de Spring + SpringMvc + Mybatis + Shiro.
1. Modifier la dépendance du fichier POM
Supprimer la dépendance au ressort précédente et ajouter la dépendance à Springboot
<parent> <proupId> org.springframework.boot </rombasid> <ArtifactId> printemps-boot-starter-parent </retifactid> <version> 1.5.9.9release </-version> </parestrence> <dependency> <proupId> org.springframework.boot </proupId> <ArtifActid> Spring-boot-Starter </Renid> <ArtifActid> <dependency> <proupId> org.springframework.boot </proupId> <ArtifactId> Spring-Boot-starter-test </ artifactid> <ccope> test </ccope> </dEpendency> <Dedency> <proupId> org.springframework.boot </proupID> <ArtifActid> Spring-boot-starter-starter-web </ artifact> <! Déploiement de Tomcat intégré -> <exclusions> <exclusion> <proupId> org.springframework.boot </proncId> <estfactId> printemps-boot-starter-tomcat </ artifactid> </cclusions> </sendency> <! - Tomcat Contework Deployment -> <Dedency> <GroupId> Org.Springfrawwoot </ GroupId>> <ArtefactId> Spring-Boot-starter-tomcat </ artifactid> <! - <ccope> compile </ccope> -> </dependency> <pependency> <proupId> org.mybatis.spring.boot </proupatid> <Artifactid> Mybatis-Spring-Boot-starter </ artifactid> <version> 1.3.) <GroupId> org.springframework.boot </proupId> <Ertifactid> printemps-boot-devtools </ artifactid> <ochotéal> true </opultal> </dependency> <! - Prise en charge @configurationproperties annotation -> <dependency> <proupId> org.springframework.boot </proupId> <ArtefactId> Spring-Boot-Configuration-Processor </ Artifactid> <Aportsal> true </acultational> </ Dependency> <Dependency> <ProupId> org.apache.tomcat.embled </proupId> <petifactid> Tomcat-Embed-Jasper </Rifactid> </Dedency> </Dependants>
Ajouter le plugin Springboot Build
<handins> <harin> <proupId> org.apache.maven.plugins </prôdId> <Artifactid> maven-compiler-Plugin </ artifactId> <Fonfi configuration> <source> 1.7 </ source> <parget> 1.7 </arget> </figionframe> </grougin> </ plugin> <rouprid> org.spring <ArtefactId> Spring-Boot-Maven-Plugin </ ArfactId> <Dersion> 1.5.9.Rease </DERNIFRITION> <IMECTIONS> <IMECUTION> <CORFACT> <FORME> Repackage </ but> </pus> </Exécution> </Executions> </ Plugin> </Glugins>
2. Ajouter le fichier de démarrage de l'application
Notez que si l'application se trouve dans le package de couche précédent de contrôleur, de service et de DAO, il n'est pas nécessaire de configurer @ComponentsCan,
Sinon, vous devez spécifier le package à numériser.
@SpringBootApplication // @ ComponentsCan ({"com.cms.controller", "com.cms.service", "com.cms.dao"}) Classe publique ApplicationExtends SpringboOtServitializer {@Override Protected SpringApplication.Sours.Source.class); } public static void main (String [] args) lève une exception {springApplication.run (application.class, args); }}3. Ajouter le fichier de configuration de Springboot
Ajouter un fichier application.properties sous ressources
Ajouter la configuration de base #Default Prefix Server.ContextPath = / # Spécifier l'environnement Spring.Profiles.Active = Local # JSP Configuration Spring.Mvc.View.Prefix = / Web-inf / JSP / Spring.mvc.View.Suffix = .JSP # Log Configuration Logging.Config = ClassPath: Logback-cms.xml # Log Configuration Fichier Logging.Config = ClassPath: Logback-cms.XML # Log Configuration Fichier Loggging logging.path = / users / mac / work-tommy / cms-springboot / logs / # data source printemp.datasource.name = admindatasourcespring.datasource.datasource.url = com.mysql.jdbc.driverspring.datasource.url = jdbc: mysql: // localhost: 3306 / mycms? useunicode = true & autoreConnect = true & worseencoding = utf-8spring.datasource.username = rootspring.datasource.password = 123456
4. Injecter la configuration à l'aide de @configuration
Injecter la configuration de MyBatis, veuillez sélectionner le plugin de pagination indépendamment
@ Configuration @ mapperscan (basepackages = "com.kuwo.dao", sqlSessionTemplateref = "AdminsqlSessionTemplate") Classe publique AdmindatasourceConfig {@Bean (name = "Admindatasource") @configurationproperties (prefix = "Spring.Datasource") AdmindataSource () {return dataSourceBuilder.create (). build (); } @Bean (name = "AdminsQlSessionFactory") @primary public sqlSessionFactory adminsqlSessionFactory (@Qualifier ("AdmindataSource") DataSource DataSource) lance une exception {sqlSessionFactoryBean Bean = new SQLSessionFactoryBean (); bean.setDataSource (dataSource); // plugin de pagination // pageHelper pageHelper = new PageHelper (); PagePlugin pagePlugin = new PagePlugin (); // Properties props = new Properties (); // props.setProperty ("raisonnable", "true"); // props.setProperty ("reversMethodsargments", "chèque"); "count = countSQL"); // pageHelper.SetProperties (accessoires); // Ajouter un plugin bean.setPlugins (new interceptor [] {pagePlugin}); // Ajouter le fichier de configuration de MyBatis Bean.setConfiglocation (new DefaultreSourceLoader (). GetResource ("classpath: mybatis / mybatis-config.xml")); // Ajouter le fichier de mappage MyBatis Bean.SetMapperLocations (new PathMatchingResourcePatterNResolver (). GetResources ("classPath: mybatis / system / *. Xml")); return bean.getObject (); } @Bean (name = "admintransactionManager") @primary public dataSourceTransactionManager AdministrTransactionManager (@qualifier ("AdmindataSource") DataSource DataSource) {return new DataSourceTransactionManager (DataSource); } @Bean (name = "adminsqlSessionTemplate") @primary public sqlSessionTemplate adminsqlSessionTemplate (@qualifier ("adminsqlSessionFactory") sqlSessionFactory SqlSessionFactory) lance une exception {retourne new sqlSessionTemplate (sqlSessionFactory); }}Ajouter la configuration de l'interceptor, faire attention à l'ordre d'AddInterceptor, ne le gâchez pas
@ConfigurationPublic Class interceptorconfigurationExtend webmvcconfigurerAdapter {@Override public void addInterceptors (InterceptorRegistry Registry) {registry.addinterceptor (new LoginHandlerInterceptor ()); }}Ajouter le fichier de configuration de Shiro
Remarque: j'ai utilisé Redis comme cache de session, mais j'ai trouvé un problème avec l'intégration avec Shiro. Une fois l'objet utilisateur stocké, il ne peut pas être converti de type après l'avoir obtenu de Shiro, j'ai donc temporairement abandonné Redis en tant que cache de session.
@Configurationpublic class shiroconfiguration {@value ("$ {printemps.redis.host}") Hôte de chaîne privée; @Value ("$ {printemps.redis.port}") Private int port; @Value ("$ {printemps.redis.timeout}") Timeout private int; @Bean Public Static LifecycleBylePostProcessor GetlifecycleBeanPostProcessor () {Return New LifecycleBeAnPostProcessor (); } / ** * shirofilterfactoryBean gère les fichiers de ressources interceptant des fichiers de ressources. * Remarque: une seule configuration ShirofilterFactoryBean est ou une erreur est signalée, car lors de la définition de la chaîne de filtre à initialiser la définition de la chaîne de filtre Description 1. Une URL peut configurer plusieurs filtres, séparés par des virgules 2. ShirofilterFactoryBean Shirofilter (SecurityManager SecurityManager) {System.out.println ("shiroconfiguration.shirfilter ()"); ShirofilterFactoryBean ShirofilterFactoryBean = new ShirofilterFactoryBean (); // SecurityManager ShirofilterFactoryBean.SetSuccressUrl ("/ userspage"); // Si vous ne définissez pas la valeur par défaut, la page "/login.jsp" dans le répertoire racine du projet Web sera automatiquement recherchée; // Si vous ne définissez pas la valeur par défaut, la page "/login.jsp" dans le répertoire racine du projet Web sera automatiquement recherchée; // Le lien à rediriger après la connexion est réussi ShirofilterFactoryBean.SetSucCessUrl ("/ userspage"); // interface non autorisée; shirofilterfactorybean.setUnAuthorizeDUrl ("/ 403"); //Intercepteur. Map <string, string> filterChainDefinitionMap = new LinkedHashMap <> (); // Configurez le filtre de sortie, le code de sortie spécifique Shiro a implémenté 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"); // <! - Définition de la chaîne de filtre, exécutée de haut en bas, mettez généralement / ** en bas ->: c'est une fosse, si vous ne faites pas attention, le code ne fonctionnera pas; // <! - Authc: Toutes les URL doivent être authentifiées avant l'accès; Anon: Toutes les URL sont accessibles de manière anonyme -> FilterChainDefinitionMap.put ("/ **", "Authc"); ShirofilterFactoryBean.SetFilterChainDefinitionMap (FilterChainDefinitionMap); retour shirofilterfactoryBean; } @Bean Public SecurityManager SecurityManager () {DefaultWebSecurityManager SecurityManager = new defaultWebSecurityManager (); // Définit le royaume. SecurityManager.SetRealm (MyshiroreAlm ()); // L'implémentation de cache personnalisée utilise redis //securityManager.SetCacheManager (cacheManager ()); // Custom Session Management utilise Redis SecurityManager.SetSessionManager (SessionManager ()); Retour SecurityManager; } @Bean public shirorealm myshirorealm () {shirorealm myshirorealm = new shirorealm (); // myshirorealm.setCredentialSmatcher (hashEdCredentialSmatcher ()); retourner myshirorealm; }} / ** * Activer le support d'annotation SHIRO AOP. * Utiliser la méthode proxy; La prise en charge du code doit donc être activée; * @Param SecurityManager * @return * / @Bean Public AuthorizationAttributesourceadVisor AuthorizationAtRributesourceadVisor (SecurityManager SecurityManager) {AutorisationAttributesourceadVisor AuthorizationAtTributesourCeadVisor = New AutorizationAttributeSourceAdVisor (); AutorisationAtTributesourceadVisor.SetSecurityManager (SecurityManager); Retour autorisationAtTributesourceadVisor; } / ** * Configuration de Shiro Redismanager * Utilisez le plugin open source de Shiro-Redis * @return * / public RedisManager RedisManager () {RedisManager RedisManager = new RedisManager (); redismanager.sethost (hôte); redismanager.setport (port); redismanager.setExpire (1800); redismanager.setTimeout (timeout); // redismanager.setpassword (mot de passe); retour redismanager; } / ** * CacheManager Cache Redis Implementation * utilise le plugin open source de Shiro-Redis * @return * / public RedisCacheManager CacheManager () {RedisCacheManager RedisCacheManager = New RedisCakeManager (); rediscacheManager.SetRedisManager (RedisManager ()); retour rediscacheManager; } / ** * L'implémentation de Redessessedao Shiro SessionDao Layer est via Redis * utilise le plugin Open Source Shiro-Redis * / @Bean Public Redissessiondao Redissessiondao () {Redissessiondao Redissessiondao = new Redissessiondao (); Redissessiondao.seDredisManager (RedisManager ()); retour redessessiondao; } @Bean public DefaultWebSessionManager SessionManager () {DefaultWebSessionManager SessionManager = new DefaultWebSessionManager (); // SessionManager.SetSessionDao (redésessiondao ()); Retour sessionManager; }}Résumer
J'ai passé une journée à convertir le projet en Springboot et à vérifier diverses informations. J'espère que cet article peut vous aider. J'espère également que tout le monde soutiendra davantage Wulin.com.