¿Hay algún proyecto de SpringMVC antiguo? Si desea convertirlo en un proyecto SpringBoot, simplemente lea este artículo.
ilustrar
Si su proyecto ni siquiera es un proyecto Maven, conviértelo en un proyecto Maven usted mismo y siga este tutorial.
Este tutorial es adecuado para el proyecto Maven de Spring+SpringMVC+MyBatis+Shiro.
1. Modifique la dependencia del archivo de POM
Eliminar la dependencia de la primavera anterior y agregar dependencia de torcer
<Parent> <MoupRoD> org.springframework.boot </groupid> <artifactid> spring-boot-starter-parent </arfactid> <verserse> 1.5.9.release </verversion> </parent> <pendencies> <pendency> <proupid> org.springframework.boot </groupid> <artifactid> spring-boot-sharter </artid </artid </artid </artid </artid> </artid </artid </artid> </artid> </artid> </artid> </artid> </artid> </artid. <Spendency> <MoupRoMID> org.springframework.boot </proupid> <artifactId> Spring-Boot-Starter-test </arfactid> <cope> test </scope> </dependency> <epardency> <proupId> org.springframe.boot </groupId> <AtifactID> spring-boot-starterweb </art de/artid>! Despliegue de Tomcat incorporado-> <EXCLUSIONES> <CALXUNSION> <MOUMPOUMID> org.springframework.boot </groupid> <artifactID> spring-boot-starter-tomcat </artifactid> </exclusions> </dependency> <!-Tomcat Diployment-> <Enterency> <ProupID> org.springFringFring.Boot. <artifactID> spring-boot-starter-tomcat </artifactid> <!-<Acpope> compile </cope>-> </pendency> <pepertency> <MoupRupid> org.mybatis.spring.boot </groupid> <artifactid> mybatis-spring-boot-starter </artifactid> <version> </versión </artifactid> mybatis-spring-boot-starter </artifactid> <version> 1. <MoupRid> org.springframework.boot </groupid> <artifactid> spring-boot-devlools </artifactid> <spectional> true </pectional> </pendency> <!-soporte @configurationProperties annotation-> <pendency> <proupid> org.springframework.boot </groupid> <artifactid> Spring-Boot-Configuration-Processor </artifactid> <spectional> true </pectional> </pendency> <pendency> <proupid> org.apache.tomcat.embed </proupid> <artifactid> tomcat-embebed-jasper </artifactid> </dependency> </pendences>
Agregar complemento de compilación SpringBoot
<glugins> <glugin> <uproupid> org.apache.maven.plugins </groupid> <artifactid> maven-compiler-plugin </arfactid> <nenturation> <overeur> 1.7 </sever> <arget> 1.7 </target> </figuration> </glugin> <glugin> <grupiD> org.springframwork.Boot </groupid> <artifactID> spring-boot-saven-plugin </artifactid> <versión> 1.5.9.Release </versewer> <cacuncisions> <secution> <pets> <putal> Repackage </meta> </metas> </ejecución> </ecuceseS> </tugin> </glugins>
2. Agregue el archivo de inicio de la aplicación
Tenga en cuenta que si la aplicación se encuentra en el paquete de capa anterior de controlador, servicio y DAO, no es necesario configurar @ComponentsCan,
De lo contrario, debe especificar qué paquete escanear.
@SpringBootApplication // @ComponentScan ({"com.cms.controller", "com.cms.service", "com.cms.dao"}) public class Application ApplicationsExtends SpringBootServeTinitializer {@override SpringApplicationBuDerIder Configuración (SpringApplicationBuilder Aplicación) {Aplicación de regreso Aplicación (Aplicación (Ssources (Ssources (Ssources (ssources (ssources) } public static void main (string [] args) lanza la excepción {SpringApplication.run (Application.Class, Args); }}3. Agregue el archivo de configuración de SpringBoot
Agregar el archivo Application.Properties bajo recursos
Agregue la configuración básica #default prefix servidor.contextpath =/#especificar entorno spring.profiles.active = local#JSP Configuración Spring.mvc.view.prefix =/web-inf/jsp/spring.mvc.view.suffix = .jsp#Archivo de configuración de registro logging.path =/ussers/Mac/Work-Tommy/CMS-Springboot/logs/#Fuente de datos Spring.datasource.name = Admindatasurcespring.dataSource.DrivClassName = com.mysql.jdbc.diverspring.dataSource.url = jdbc: mysql: // localhost: 3306/mycms? useUnicode = true & autoreconnect = true & caracterSencoding = utf-8spring.dataSource.username = rootspring.dataSource.password = 123456
4. Inyecte la configuración usando @Configuration
Inyectar configuración de mybatis, seleccione el complemento de paginación de forma independiente
@Configuración @mapperscan (basepackages = "com.kuwo.dao", sqlsessionTemplAtef = "adminsqlSessionTemplate") clase pública admindataSourConFig {@Bean (name = "admindataSource") @configurionPoperties (prefix = "Spring.dataSource") admindataSource () {return dataSourceBuilder.create (). Build (); } @Bean (name = "AdminsqlSessionFactory") @Primary Public SQLSessionFactory AdminsqlSessionFactory (@Qualifier ("AdmindataSource") DataSource DataSource) arroja una excepción {sqlSessessessionBean bean = new sqlSessionBean (); Bean.SetDataSource (DataSource); // complemento de paginación // PageHelper PageHelper = new PageHelper (); PAGEPLUGIN PAGEPLUGIN = new PagePlugin (); // Properties props = new Properties (); // propsssetProperty ("razonable", "true"); // propssetproperty ("soportMethodSarGuments", "true"); // propss.SetProperty ("returnPageInfo", "cheque"); // propss.setpreperty (",", "," parámetros "," parámetros ". "Count = CountSql"); // PageHelper.SetProperties (Props); // Agregar plugin bean.setPlugins (nuevo interceptor [] {PagePlugin}); // Agregue el archivo de configuración de MyBatis bean.setConfigLocation (new DeFaulTresourCelOader (). GetResource ("ClassPath: MyBatis/MyBatis-Config.xml")); // Agregue el archivo de mapeo mybatis bean.setMapperLocations (New PathMatchingResourCePternResolver (). GetResources ("ClassPath: MyBatis/System/*. Xml")); return bean.getObject (); } @Bean (name = "AdminTransactionManager") @Primary Public DataSourCetransactionManager AdminatRanActionManager (@Qualifier ("AdmindataSource") DataSource DataSource) {return New DataSourCetransactionManager (DataSource); } @Bean (name = "AdminsqlSessionTemplate") @Primary public sqlSessionTemplate AdminsqlSessionTemplate (@Qualifier ("AdminsqlSessionFactory") sqlSessionFactory sqlSessionFactory) lanza la excepción {return New sqlSessionTemplate (sqlsessionfactory); }}Agregue la configuración del interceptor, preste atención al orden de Addinterceptor, no lo arruine
@ConfigurationPublic Class InterceptorConfigurationExtends WebMVCConfigurerAdapter {@Override public void addInterceptors (InterceptorRegistry Registry) {Registry.Addinterceptor (new LoginHanderInterceptore ()); }}Agregar archivo de configuración de Shiro
Nota: Utilicé Redis como caché de sesión, pero encontré un problema con la integración con Shiro. Después de almacenar el objeto de usuario, no se puede convertir tipo después de obtenerlo de Shiro, por lo que temporalmente dejé de Redis como caché de sesión.
@ConfigurationPublic Clase Shiroconfiguration {@Value ("$ {Spring.Redis.host}") Private String Host; @Value ("$ {spring.redis.port}") private int puerto; @Value ("$ {spring.redis.timeout}") private int timeOut; @Bean public static lifecycleBeanPostProcessor getLifecycleBeanPostProcessor () {return New LifeCycleBeanPostProcessor (); } /*** ShirofilterFactoryBean maneja que interceptan archivos de recursos. * Nota: Una sola configuración de ShiroFilterFactoryBean es o se informa un error, porque al * inicializar ShirOfilterFactoryBean, es necesario inyectar: SecurityManager * Definición de la cadena de filtro Descripción 1. Una URL puede configurar múltiples filtros, separados por Commas 2. Cuando se establecen múltiples filtros, todas las verificaciones se pasarán, y solo 3. Algunos filtros pueden especificar parámetros, tal como los Commas, Reats */ RhuseS * ShirOfilterFactoryBean Shirofilter (SecurityManager SecurityManager) {System.out.println ("shiroconfiguration.shirfilter ()"); ShirofilterFactoryBean shirofilterFactoryBean = new shirofilterFactoryBean (); // SecurityManager shirofilterFactoryBean.SetSuccessurl ("/UsersPage"); // Si no establece la página predeterminada, la página "/Login.jsp" en el directorio raíz del proyecto web se buscará automáticamente; // Si no establece la página predeterminada, la página "/Login.jsp" en el directorio raíz del proyecto web se buscará automáticamente; // El enlace que se redirige después del inicio de sesión es exitoso shirofilterfactorybean.setsuccessurl ("/usserePage"); // interfaz no autorizada; shirofilterFactoryBean.setUnAuthorizedUrl ("/403"); //Interceptador. MAP <String, String> FilterChainDefinitionMap = new LinkedHashMap <> (); // Configurar el filtro de salida, el código de salida específico shiro ha implementado filterChainDefinitionMap.put ("/logrout", "logrout"); 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"); // <!-Definición de la cadena de filtro, ejecutada de arriba a abajo, generalmente poner /** en la parte inferior->: Este es un pozo, si no tiene cuidado, el código no funcionará; // <!- Authc: todas las URL deben ser autenticadas antes de acceder; Anon: se puede acceder a todas las URL de forma anónima-> FilterChainDefinitionMap.put ("/**", "Authc"); shirofilterFactoryBean.setFilterChainDefinitionMap (filtreChainDefinitionMap); return shirofilterfactorybean; } @Bean public SecurityManager SecurityManager () {defaultWebSecurityManager SecurityManager = new DefaultWebSecurityManager (); // Establecer reino. SecurityManager.SetRealm (myShireRealm ()); // La implementación de caché personalizado utiliza Redis //securityManager.setCachemanager (Cachemanager ()); // La gestión de sesiones personalizada utiliza Redis SecurityManager.SetSessionManager (SessionManager ()); return SecurityManager; } @Bean public shirorealm myShirorealM () {shirorealm myshirorealm = new shireRealm (); // myshirorealm.SetCredentialSmatcher (HashedCredentSmatcher ()); regresar myshirorealm; }} /*** Habilitar el soporte de anotación shiro AOP. * Usar el método proxy; Por lo tanto, el soporte de código debe estar habilitado; * @param SecurityManager * @return */ @Bean Public AuthorizationAttributeSourCeAdVisor AutorationAtTributesOurCeadVisor (SecurityManager SecurityManager) {AuthorizationAttributesOurCeadVisor AuthorizationAttributeSourCeAdVisor = nueva autorizaciónatruSteurCeadVisor (); AutorationAtTributesOurCeadVisor.SetSecurityManager (SecurityManager); devolver la autorizaciónattributesurCeadVisor; } / ** * Configuración de shiro redismanager * Use el complemento de código abierto Shiro-Redis * @return * / public redismanger redishanager () {redismanager redishanager = new RedIsManager (); redismanger.sethost (anfitrión); redismanger.setport (puerto); Redismanager.SetExptire (1800); redismanger.setTimeOut (tiempo de espera); // redismanger.setPassword (contraseña); devolver redismanager; } / *** Cachemanager Cache Redis Implementación* Utiliza el complemento de código abierto Shiro-Redis* @return* / public redisCachemanager Cachemanager () {redisCachemanager rediscachemanager = new Rediscachemanager (); redisCachemanager.setRedisManager (redismanger ()); regresar rediscachemanager; } / *** La implementación de la capa de redissiondao shiro sessiondao es a través de redis* utiliza el complemento de código abierto Shiro-Redis* / @Bean public Redissessiondao RedisSessionDao () {RedissessionDao RedissessionDao = New RedisSessionDao (); redissionDao.setRedisManager (redismanger ()); return Redissessiondao; } @Bean public DefaultWebSessionManager sessionManager () {defaultWebSessionManager sessionManager = new DefaultWebSessionManager (); // sessionManager.setsessionDao (redissionDao ()); Return SessionManager; }}Resumir
Pasé un día convirtiendo el proyecto en Springboot y revisando varias información. Espero que este artículo pueda ayudarte. También espero que todos apoyen más a Wulin.com.