Existe algum projeto antigo do Springmvc? Se você deseja convertê -lo em um projeto de troca, basta ler este artigo.
ilustrar
Se o seu projeto nem sequer for um projeto Maven, converta -o em um projeto MAVEN sozinho e siga este tutorial.
Este tutorial é adequado para o projeto Maven do Spring+Springmvc+Mybatis+Shiro.
1. Modifique a dependência do arquivo POM
Exclua a dependência anterior da primavera e adicione dependência de trampolim
<Parent> <puriid> org.springframework.boot </frupid> <TRATIFACTID> Spring-boot-starter-parent </stutifactId> <Versão> 1.5.9.Release </siperS> <//parent> </dependências> <pendency> <puperId> org.springFrame.Boot </Grupoid> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- This is to remove the Implantação de Tomcat embutida-> <clusions> <clusão> <puperid> org.springframework.boot </groupiD> <stifactId> spring-boot-starter-tomcat </tutifactId> </clusions> </dependência> <!-Departamento de contêiner Tomcat-<Fendence> <PrinceId> <pussions> </dependência> <!-Tomcat Depleming-dependência> <Fendence> <pushId> <artifactId>spring-boot-starter-tomcat</artifactId> <!--<scope>compile</scope>--> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <dependency> <GrupId> org.springframework.boot </frugiD> <ArtifactId> primavera-boot-devtools </artifactId> <cptional> true </cptional> </dependency> <!-support @configurationproperties anotação-> <Pepency> <purbrougd> org.springframework.BOT.BOOT <PRINDROTN.BOOT <SPRINGSPRINGSOTN.BOTTIONSOTNOTIONS- <TarifactId> Spring-Boot-Configuration-Processor </ArtifactId> <cptional> true </cptional> </dependency> <pendence> <voundid> org.apache.tomcat.embed </proupid> <stifactId> tomcat-embed-jasper </starfactid> </dependence>
Adicione o plugin de construção de troca de troca
<flugins> <flugin> <voundId> org.apache.maven.plugins </groupiD> <TRATIFACTID> maven-compiler-pplugin </artifactId> <figuration> </fonte..7 </fonte> <-Target> 1.7 </-Target> </figuration> </lumin> <flugin> <TarfactId> Spring-boot-maven-plugin </ArtifactId> <Versão> 1.5.9.release </sipers> <Comestion> </Execution> <lects> <lection> Repackage </Goal> </metas> </cemecution> </execuções> </flugin> </flugins>
2. Adicione o arquivo de inicialização do aplicativo
Observe que, se o aplicativo estiver no pacote de camada anterior de controlador, serviço e dao, não há necessidade de configurar @componentscan,
Caso contrário, você precisa especificar qual pacote para digitalizar.
@SpringbooTApplication // @componentsCan ({"com.cms.controller", "com.cms.service", "com.cms.dao"}) public class ApplicationExtends SpringbootsLitletInitializer {@Override Protected SpringApplicationBuilder Configure (SpringApplicationBuilder {@Override SpringApplicationBuilder (SpringApplicationBuilder) } public static void main (string [] args) lança a exceção {springapplication.run (application.class, args); }}3. Adicione o arquivo de configuração de trampolim
Adicionar arquivo Application.Properties em recursos
Adicione a configuração básica #Default Prefix Server.ContextPath =/#Especifique o ambiente Spring.Profiles.Active = Local#JSP Configuration spring.mvc.view.prefix =/web-inf/jsp/spring.mvc.view.suffix = .jsp#logging de logging.config = ClassPath: Logback. logging.path =/usuários/mac/work-tommy/cms-springboot/logs/#fonte de dados spring.datasource.name = admindataSourcespring.datasource.driverclassName = com.mysql.jdbc.driverspring.datasource.url = jdbc: mysql: // localhost: 3306/mycms? useunicode = true & autoreconnect = true & caracterEncoding = utf-8spring.datasource.username = rootspring.datasource.password = 123456
4. Injetar configuração usando @configuration
Injete a configuração do mybatis, selecione o plug -in de paginação de forma independente
@Configuration @MapperScan (BasEpackages = "com.kuwo.dao", sqlSessionTemplateref = "AdminsqlSessionTemplate") classe public AdmindataSourCeconfig {@Bean (Name = "AdmindataSource") @configuraturationProperties (prefix (prefix = "Springs =" AdmindataSource () {return DataSourceBuilder.Create (). Build (); } @Bean (name = "AdminsqlSessionFactory") @Primary Public SQLSessionFactory AdminsqlSessionFactory (@qualifier ("AdmindataSource") DataSource) lança exceção {sqlsessionBean Bean = New SqlsessionFactoryBean; bean.setDataSource (DataSource); // plugin de paginação // pageHelper PageHelper = new PageHelper (); PagePlugin PagePlugin = new PagePlugin (); // Propriedades Props = new Properties (); // Props.SetProperty ("razoável", "true"); // props.setProperty ("SupportMethodSarguments", "True"); // PropsProperty ("ReturnPageInfO", "check"); "count = countSql"); // PageHelper.SetProperties (Props); // Adicione o plugin bean.setplugins (novo interceptor [] {PagePlugin}); // Adicione o arquivo de configuração mybatis bean.setConfigLocation (new AfaultResourceLoader (). GetResource ("ClassPath: mybatis/mybatis-config.xml")); // Adicione o arquivo de mapeamento mybatis bean.setmapperlocations (new PathMatchingResourcepTatternResolver (). GetResources ("ClassPath: mybatis/System/*. Xml")); return bean.getObject (); } @Bean (name = "adminTransactionManager") @Primary public DataSourCetransactionManager AdminTransactionManager (@qualifier ("AdmindataSource") DataSource DataSource) {Return DataSourCetransactionManager (DataSource); } @Bean (name = "AdminsqlSessionTemplate") @Primary Public SQLSessionTemplate AdminsqlSessionTemplate (@qualifier ("AdminsqlSessionFactory") sqlSessionFactory SQLSessionFactory) lança exceção {Return {New SqlSessionTemplate (SQLSFATCORTION; }}Adicione a configuração do interceptador, preste atenção à ordem do addInterceptor, não estrague tudo
@ConfigurationPublic Class InterceptConfigurationExtndEn WebMVCConfigureRAdApter {@Override public void AddInterceptores (InterceptorRegistry Registry) {Registry.addintercept (new LogInHandlerIntercetor ()); }}Adicionar arquivo de configuração Shiro
Nota: usei o Redis como cache da sessão, mas encontrei um problema com a integração com Shiro. Depois que o objeto do usuário for armazenado, ele não pode ser convertido no tipo depois de obtê-lo do Shiro, então desisti temporariamente do Redis como cache da sessão.
@ConfigurationPublic Classe Shiroconfiguration {@Value ("$ {spring.redis.host}") host private string; @Value ("$ {spring.redis.port}") private int porta; @Value ("$ {spring.redis.timeout}") private int timeout; @Bean public static lifecycleBeanPostProcessor getLifeCycleBeanPostProcessor () {return new LifeCycleBeanPostProcessor (); } /*** ShirofilterFactoryBean lida com arquivos de recursos interceptos. * Nota: uma única configuração shirofilterfactorybean é ou um erro é relatado, porque ao * inicializar o ShirofilterFactoryBean, é necessário injetar: SecurityManager * Definição da cadeia de filtro 1. Um URL pode configurar vários filtros, separados por filmes 2. ShirofilterFactoryBean Shirofilter (SecurityManager SecurityManager) {System.out.println ("shiroconfiguration.shirfilter ()"); ShirofilterFactoryBean ShirofilterFactoryBean = new ShirofilterFactoryBean (); // SecurityManager ShirofilterFactoryBean.SetSuccessUrl ("/UsersPage"); // Se você não definir o padrão, a página "/Login.jsp" no diretório raiz do projeto da Web será pesquisada automaticamente; // Se você não definir o padrão, a página "/Login.jsp" no diretório raiz do projeto da Web será pesquisada automaticamente; // O link a ser redirecionado após o login for bem -sucedido ShirofilterFactoryBean.SetSuccessUrl ("/Userspage"); // interface não autorizada; ShirofilterFactoryBean.setunauthorizedurl ("/403"); //Interceptor. Mapa <string, string> filterChainndefinitionMap = new LinkedHashMap <> (); // Configurar o filtro de saída, o código de saída específico Shiro implementou o filtroCHAINDeFinitionMap.put ("/logout", "logout"); filterChainndefinitionMap.put ("/login_tologin", "anon"); filterChainndefinitionMap.put ("/login_login", "anon"); filterChainndefinitionMap.put ("/static/login/**", "anon"); filterChainndefinitionMap.put ("/static/js/**", "anon"); filterChainndefinitionMap.put ("/uploadfiles/uploadimgs/**", "anon"); filterChainndefinitionMap.put ("/code.do", "anon"); filterChainndefinitionMap.put ("/font-awome/**", "anon"); // <!-Definição da cadeia de filtro, executada de cima para baixo, geralmente colocada /** na parte inferior->: Este é um poço, se você não tiver cuidado, o código não funcionará; // <!- Authc: Todos os URLs devem ser autenticados antes de acessar; Anon: Todos os URLs podem ser acessados anonimamente-> filterChainndefinitionMap.put ("/**", "authc"); shirofilterFactoryBean.SetFilterChaindEfinitionMap (FilterChaIndEfinitionMap); Retornar ShirofilterFactoryBean; } @Bean Public SecurityManager SecurityManager () {DefaultWebSecurityManager SecurityManager = new DefaultWebSecurityManager (); // Defina o reino. SecurityManager.SetRealM (myshirorealm ()); // A implementação de cache personalizada usa Redis //SecurityManager.SetCachemanager (Cachemanager ()); // Gerenciamento de sessão personalizada usa o Redis SecurityManager.SetSessionManager (sessionManager ()); Retornar SecurityManager; } @Bean Public Shirorealm myshirorealM () {shirorealm myshirorealm = new shirorealm (); // myshiroreal.SetcredentialSmatcher (hashedCredentialsmatcher ()); devolver myshirorealm; }} /*** Ativar suporte de anotação Shiro AOP. * Use o método proxy; Portanto, o suporte de código precisa ser ativado; * @Param SecurityManager * @return */ @Bean Public AuthorizationAttributesOrCeadVisor AuthorizationAttributesOrceadvisor (SecurityManager SecurityManager) {AuthorizationAttributesourCeadvisor AuthorizationAttributesOrceadvisor = novo AuthorizationAttributesOrCeadvisor (); AuthorizationAttributesourCeadvisor.SetSecurityManager (SecurityManager); Retorno AuthorizationAttributesourCeadvisor; } / ** * Configurando Shiro RedisManager * Use Shiro-Redis Open Source Plugin * @return * / public RedisManager RedisManager () {RedisManager RedisManager = new RedisManager (); RedisManager.Sethost (host); RedisManager.SetPort (Port); RedisManager.setexpire (1800); RedisManager.SetTimeout (Timeout); // redismanager.setpassword (senha); Retornar RedisManager; } / *** CACHEMANAGER CACHE REDIS IMPLEMENTAÇÃO* Usa Shiro-Redis Open Source Plugin* @return* / public Rediscachemanager Cachemanager () {Rediscachemanager Rediscachemanager = novo Rediscachemanager (); Rediscachemanager.SetRedisManager (RedisManager ()); retornar rediscachemanager; } / *** A implementação da camada RedissessionDao Shiro SessionDao é através do Redis* usa o plug-in de código aberto Shiro-redis* / @Bean public redissionDao redissionDao () {redissessionDao RedissessionDao = new RedisSessionDao (); redissessionDao.setRredisManager (RedisManager ()); Retornar RedissessionDao; } @Bean Public DefaultWebSessionManager sessionManager () {DefaultWebSessionManager sessionManager = new DefaultWebSessionManager (); // sessionManager.SetSessionDao (redissessionDao ()); retorno sessionmanager; }}Resumir
Passei um dia convertendo o projeto em Springboot e verificando várias informações. Espero que este artigo possa ajudá -lo. Eu também espero que todos apoiem mais wulin.com.