手把手入门Springboot2之Web新手村
SpringBoot使用Interceptor拦截器
拦截器的实现方式
1、继承HandlerInterceptorAdapter的父类
2、实现HandlerInterceptorAdapter接口(推荐方式)
SpringMVC使用拦截器的步骤
1、在session中存储用户信息,用于进行权限验证。
2、实现HandlerInterceptorAdapter接口,重写preHandle()方法
3、springMVC.xml文件中注册拦截器
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//判断是否登录过
if (request.getSession().getAttribute("id") ==null){
request.setAttribute("msg","还未登录!");
//转发
request.getRequestDispatcher("/WEB-INF/Page/login.jsp").forward(request,response);
return false;
}else {
return true;//放行
}
}
}
注册拦截器
springmvc.xml
<!-- 注册拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--设置要拦截的请求 -->
<mvc:mapping path="/**"/>
<!--设置放行的请求-->
<mvc:exclude-mapping path="/showLogin"/>
<mvc:exclude-mapping path="/loginCheck"/>
<!--配置拦截器实现功能类-->
<bean class="com.qgs.controller.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
Spring Boot使用拦截器的步骤
1、注册拦截器
2、实现拦截器
实现WebMvcConfigurer接口注册连接器(等同于在springmvc.xml中注册拦截器)
//注册拦截器
public class MvcConfig implements WebMvcConfigurer {
//添加拦截器对象,并注入IOC容器
@Override
public void addInterceptors(InterceptorRegistry registry) {
HandlerInterceptor interceptor = new Login();
//拦截哪个地址
String[] PathPattern ={"/Info/**"};
registry.addInterceptor(interceptor).addPathPatterns(PathPattern);
//放行哪个地址
String[] path ={"/login/**","/show/**"};
registry.addInterceptor(interceptor).excludePathPatterns(path);
//设置拦截器执行顺序
registry.addInterceptor(interceptor).order(1);
}
}
实现HandlerInterceptor接口,实现拦截器
//注册拦截器
@Configuration
public class MvcConfig implements WebMvcConfigurer {
//添加拦截器对象,并注入IOC容器
@Override
public void addInterceptors(InterceptorRegistry registry) {
//创建拦截器对象
HandlerInterceptor interceptor = new Login();
//拦截哪个地址
String[] PathPattern ={"/Info/**"};
//放行哪个地址
String[] path ={"/login/**","/show/**"};
registry.addInterceptor(interceptor)
.addPathPatterns(PathPattern) //拦截
.excludePathPatterns(path);//放行
}
}
SpringBoot中使用Servlet
1、创建Servlet类。
2、注册Servlet
创建Servlet类
public class ServletA extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("hello servlet");
out.flush();
out.close();
}
}
注册Servlet
//注册servlet
@Configuration//代替xml文件
public class ServletConfig {
@Bean
public ServletRegistrationBean servletRegistrationBean(){
ServletRegistrationBean bean =new ServletRegistrationBean(
new ServletA(),"/ServletA");
//bean.addUrlMappings("/ServletA" ,"/hello");
return bean;
}
}
SpringBoot使用自定义Filter过滤器
Filter是Servlet规范中的过滤器,可以处理请求,请求参数,属性。常用在过滤处理字符编码
Filter过滤器的使用及原理
如:没一个Servlet都要解决中文乱码问题,也有公共代码,这些代码目前都是重复编写,并没有达到复用的效果。
Filter过滤器是和用户的请求路径对应的。
Filter过滤器可以在Servlet这个目标程序执行之前添加代码。也可以在Servlet执行之后添加代码。
一般在过滤器当中编写公共代码。
Filter对象在服务器启动的时候会新建对象。而Servlet在服务器启动时不会新建对象。
Filter和Servlet是单例的。
Filter的实现
java类实现Filter接口
Init方法:在Filter对象第一次被创建后调用,并且只调用一次。
doFilter方法:用户每发送一次请求就执行一次。
Destroy()方法:Filter对象被释放/销毁之前执行,并且只调用一次。
SpringBoot中使用Filter
- 创建类
- 注册Filter
//自定义过滤器
public class FilterA implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("过滤了");
filterChain.doFilter(servletRequest,servletResponse);
}
}
//注册Filter
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean filterRegistrationBean(){
FilterRegistrationBean bean =new FilterRegistrationBean();
bean.setFilter(new FilterA());
//设置过滤地址
bean.addUrlPatterns("/login/*");
return bean;
}
}
SptingBoot使用字符集过滤器
Servet默认响应的是ISO-8859-1
使用步骤
1、注册过滤器
2、application.properties配置
//注册Filter
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean filterRegistrationBean(){
FilterRegistrationBean bean =new FilterRegistrationBean();
//使用框架中的字符集过滤类
CharacterEncodingFilter charFilter =new CharacterEncodingFilter();
charFilter.setEncoding("utf-8");
charFilter.setForceEncoding(true);
bean.setFilter(charFilter);
//设置过滤地址
bean.addUrlPatterns("/*");
return bean;
}
}
#Springboot框架已经设置CharacterEncodingFilter
#默认编码为 ISO-8859-1 false表示关闭#Springboot框架已配置的过滤器
server.servlet.encoding.enable=false
application.properties设置过滤器字符集
设置Springboot框架中(已存在)的CharacterEncodingFilter字符集
#启用
server.servlet.encoding.enable=true
#设置指定的字符集
server.servlet.encoding.charset=utf-8
#强制request和response使用utf-8字符集
server.servlet.encoding.force=true
- 点赞
- 收藏
- 关注作者
评论(0)