今天搞了一下Spring Boot,使用自动生成的,现在自动生成都是2.1.3的Spring Boot版本,与我在网上找的视频版本不是很一样。
刚开始还没有遇到有js/css样式的问题,就出现了一个这样的错:
发现这个jq文件找不到,然后我去pom文件中找了一下,发现没有导入相对应的jq依赖,Springboot官方是推荐使用webjars的
<!--引入jquery-webjar-->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1</version>
</dependency>
以及bootstrap依赖
<!--引入bootstrap-->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>4.0.0</version>
</dependency>
那么为什么要使用webjar呢?
将静态资源版本化,更利于升级和维护。
剥离静态资源,提高编译速度和打包效率。
实现资源共享,有利于统一前端开发。
可以直接去webjars的官网直接下载自己所需要版本的maven依赖:
.......本来觉得这样应该就没什么问题了,后面在进行登录的时候发现了js、css等样式丢失了,然后找了一会儿发现应该是被拦截器拦截了,然后按照1.X的版本对类SpringMVC进行了扩展,也就是如下
该方法已经过时了,然后又去观看了一下1.X和2.X的区别,这里推荐一个文章,是SpringBoot 1.X和 2.X的区别
然后在经过了百度和查询文档,发现2.X的SpringBoot已经不在使用继承WebMvcConfigurerAdapter了,而是使用实现类
实现WebMvcConfigurer接口
扩展SpringMVC需要的方法,这里有一个注解可以了解一下@EnableWebMvc
(这个注解的作用是我们自己完全掌控SpringMVC,也就是说,Spring Boot不在给我们自动添加Spring MVC的基本组件,一切都要自己手动实现。)
接着我们继续添加我们需要的方法进行重写(需要在类上实现WebMvcConfigurer),重写addInterceptors拦截器组件
首先写一个自定义拦截器类,方法空实现也行,只要拦截器的方法preHandle放行就行
package com.hbsi.springbootdemo01.interceptor;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
public class MyLoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HashMap<String, String> map = new HashMap<>();
HttpSession session = request.getSession();
Object user = session.getAttribute("loginUser");
if(user == null){
//map.put("msg","还没有登录请先登录");
request.setAttribute("msg","还没有登录请先登录");
request.getRequestDispatcher("/login").forward(request,response);
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
}
接着在我们的配置类中把该拦截器类添加到容器当中
//添加拦截器组件bean
@Bean
public MyLoginInterceptor myLoginInterceptor(){
return new MyLoginInterceptor();
}
千万别忘记了在方法的头上加上@Bean注解,也别忘了在类上面加上@Configuration注解或者@Component
,不然我们的类就不是一个扩展类了。
实现addInterceptors方法
//装配自定义拦截器
@Autowired
private MyLoginInterceptor myLoginInterceptor;
/**
* 添加拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) { //addPathPatterns()拦截什么目录
InterceptorRegistration registration = registry.addInterceptor(myLoginInterceptor).addPathPatterns("/**"); //注册添加拦截器
registration.excludePathPatterns("/","/login.html","/user/login",
"/login","/asserts/css/**","/asserts/img/**","/asserts/js/**","/webjars/**"); //不拦截什么
}
registry.addInterceptor(myLoginInterceptor)填写我们自定义的拦截器。
addPathPatterns是拦截什么目录,这里我们拦截所有/**。
excludePathPatterns不拦截什么,放行登录注册的一些方法和页面,这里需要拦截器不拦截js、css,然后webjars我也放行了我怕万一webjars也被拦截了。
然后一起测试,webjars的jq依赖问题也解决了,js、css样式也能显示了,这里就不放图了。
后记
以上就是今天所遇到的一些问题,关于SpringBoot也是初学,对于2X还有很多都没有了解、也包括一些源码、properties文件等等,如果下次遇到了这类和版本不一样的东西也会做一些记录,时间也不早了,溜了溜了。