Spring项目整合成SpringBoot的简单登录拦截Demo

sss整合成SpringBoot

  • 环境:

    ​ jdk11

    ​ tomcat 8.5.41

    ​ springboot 2.3.2.RELEASE

    ​ redis

  • jar包和war包 启动

    jar包:SpringBoot本身不支持JSP

    https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-jsp-limitations

    如何让SpringBoot的jar包兼容jsp?

    spring-boot-starter-web中有tomcat.embed.core等依赖,但是没有tomcat-embed-jasper依赖,因此需要在pom中额外添加,用来解析jsp,否则打开jsp会直接下载文件。

    此处并不像网上文章所说需要添加<scope>provided</scope>,实测添不添加,用main或者jar启动都可以正常访问,没有报错也没有冲突。照理说如果添加了反而不会打到jar包中应该会无效,这里求高人指点。

    <dependency>
    	<groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <!-- <scope>provided</scope> -->
    </dependency>
    如果用到servlet或者jstl则添加相关依赖,没有用到可以不加。
    

    此时直接main方法启动是可以正常访问的,但是打包会发现没有把webapp中的内容打到jar中,因此pom中还需要在plugins后面添加一段

    <resources>
    	<resource>
    		<directory>src/main/webapp</directory>
    		<targetPath>META-INF/resources</targetPath>
    	</resource>
    </resources>
    

    此时会发现jar包webapp下的jsp已经被打到META-INF/resources下了,但是仍然访问不到,经过查询还需要springbootmaven1.4.2及以下的版本才可以

    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.4.2.RELEASE</version>
        </plugin>
    </plugins>
    

    由于我在static中加了一个jsp作测试,这里也必须配置resource标签,否则将无法访问到static中的jsp,只能访问静态资源。这里不建议这么做,因为这样的话resources目录中的文件会被打包两次,分别放在BOOT-INF和META-INF中。

     <resource>
         <!-- 指定resources插件处理哪个目录下的资源文件 -->
         <directory>src/main/resources/static</directory>
         <targetPath>META-INF/resources</targetPath>
    </resource>
    

    到此打包完成,jar运行成功访问到webapp下的jsp

    https://blog.csdn.net/ssxueyi/article/details/100990002

    war包:
    不需要tomcat-embed-jasper
    也不需要spring-boot-starter-tomcat
    也不需要javax.servlet
    不知道为什么网上说需要排除自身的tomcat否则会冲突,实测不会
    不需要下面的这些
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
    	<artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
    <dependency>
    	<groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    	<exclusions>
    		<exclusion>
    			<groupId>org.springframework.boot</groupId>
            	<artifactId>spring-boot-starter-tomcat</artifactId>
        	</exclusion>
    	</exclusions>
    </dependency>
    
    只需启动类改为:
    @SpringBootApplication
    public class BootwebclusterApplication extends SpringBootServletInitializer {
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(BootwebclusterApplication.class);
        }
        public static void main(String[] args) {
    		SpringApplication.run(BootwebclusterApplication.class, args);
        }
    }
    并且配置<packaging>war</packaging>
    
  • jar包改war后如果不是在root中运行,则需要在跳转链接前面加项目名
    java:
    	request.getContextPath()
    jsp:
    	<%= this.getServletContext().getContextPath() %>
    el:
    	${pageContext.request.contextPath}
    
    
  • 拦截器

    会拦截静态资源。

    如果访问不存在的资源会跳转到/error,但error仍会被拦截,因此会被跳转到登录界面,因此拦截器配置如下

    @Configuration
    public class MvcConfig implements WebMvcConfigurer {
        //  注入拦截器
        @Bean
        public LoginInteceptor getLoginInterceptor(){
            return  new LoginInteceptor();
        }
        //   把自定义的拦截器添加到mvc 配置中
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(this.getLoginInterceptor())
                    .addPathPatterns("/**").excludePathPatterns("/login","/error"
                    ,"/**/*.jsp"
                    ,"/**/*.js","/**/*.css","/**/font/*");
        }
    }
    
  • ajax请求到后台重定向或设置视图无效

demo地址
https://gitee.com/NathanWH/Learn/tree/master/%E9%98%B6%E6%AE%B5%E4%BA%8C/web_cluster/bootwebcluster

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值