1、拦截器
1.1创建拦截器类
拦截器类要实现HandlerInterceptor接口,这个接口有以下三个方法:
- preHandle
- postHandle
- afterCompletion
我们以第一个为例,实际上用的最多的还是第一个,这是在访问之前执行的方法。示例代码如下,这个代码是判断用户是否登录过。
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("进入拦截器");
//编写拦截业务的规则
//从session中获取用户的信息
User user= (User) request.getSession().getAttribute("user");
if (null==user){
//未登录
response.sendRedirect(request.getContextPath()+"/user/error");
return false;
}
return true;
}
preHandle的返回值是boolean类型,如果是true则放行,否则不放行。
1.2创建配置类对象
在SpringMVC中,我们在创建完毕后就开在SpringMVC的配置文件中加入注解,但是在SpringBoot不是这样的。需要创建一个配置类,类应该实现WebMvcConfigurer接口示例代码如下:
@Override
public void addInterceptors(InterceptorRegistry registry) {
//拦截user下面的所有的访问请求,必须用户后才可以访问,但是这样的拦截的路径中有一些是不需要
//用户登录也可以访问的
String[] addPathPatterns={
"/user/**" //**的意思是下面的各层目录下的都算
};
//要排除的路径,排出的路径不需要用户登录也可以访问
String[] excludepathPatterns={
"/user/out","/user/error","/user/login"
};
//mvc:interceptors bean class=""
registry.addInterceptor(new UserInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludepathPatterns);
}
2.servlet(了解就行)
2.1使用注解
第一步:创建servlet类,类名不限,继承HttpServlet,在类上面加入注解@WebServlet(urlPatterns = “/名称”)
第二步:在springboot的启动入口加入注解@ServletComponentScan(basePackages = “servlet包的路径”)
2.2使用配置类
第一步:创建servlet类,继承HttpServlet类
第二步:创建配置类,示例如下:
@Configuration//该注解将此类定义为配置类(相当于xml配置文件)
public class ServletConfig {
//是一个方法级别上的注解,主要用于配置类里面
//相当于一个bean标签
@Bean
public ServletRegistrationBean myServletReqistryBean(){
ServletRegistrationBean servletRegistrationBean=new ServletRegistrationBean(new 自己创建的servlet类,"/访问路径");
return servletRegistrationBean;
}
}
3.过滤器
3.1使用注解
第一步:创建过滤器类,实现Filter接口,在类的上面加入注解@WebFilter(urlPatterns = “/访问路径”)
示例代码如下:
@WebFilter(urlPatterns = "/myfilter")
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("--------您以进入过滤器------");
filterChain.doFilter(servletRequest,servletResponse);//放行
}
}
第二步:Springboot的启动类上面加入@ServletComponentScan(basePackages = “过滤器类所在的包的路径”)
3.2使用配置类
第一步:创建过滤器类,实现Filter接口
第二步:创建配置类。配置类上面加入@Configuration,类的方法上面加入 @Bean,示例代码如下:
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean myFilterRegistrationBean(){
//注册过滤器
FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean(new 自己创建的过滤器类());
//添加过滤路径,只能一个星星
filterRegistrationBean.addUrlPatterns("/user/*");
return filterRegistrationBean;
}
}
4.配置字符编码
4.1第一种方法
第一步:创建servlet,步骤如上。
第二步:创建配置类,创建配置方法。示例代码如下:
@Bean
public FilterRegistrationBean characterFilterRegistration() {
//设置字符编码过滤器
//CharacterEncoding 是由 Spring 提供的一个字符编码过滤器,之前是配置在
web.xml 文件中
CharacterEncodingFilter characterEncodingFilter = new
CharacterEncodingFilter();
//强制使用指定字符编码
characterEncodingFilter.setForceEncoding(true);
//设置指定字符编码
characterEncodingFilter.setEncoding("UTF-8");
//创建过滤器注册 bean
FilterRegistrationBean filterRegistrationBean = new
FilterRegistrationBean();
//设置字符编码过滤器
filterRegistrationBean.setFilter(characterEncodingFilter);
//设置字符编码过滤器路径
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
第三步:在servlet的类中的方法区加入
resp.setContentType("text/html;character=utf-8");
第四步:关闭 SpringBoot 的 http 字符编码支持
在SpringBoot配置文件中加入以下配置:
#关闭springboot的http字符编码的支持
#只有关闭该选项后,spring字符编码过滤器生效
server.servlet.encoding.enabled=false
7.2第二种方式
第一步:SpringBoot 核心配置文件添加字符编码设置
#设置请求响应的字符编码
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
第二步:创建servlet类,略。
第三步:在servlet类的方法中加入
resp.setContentType(“text/html;character=utf-8”);