手把手入门Springboot2之Web新手村

举报
QGS 发表于 2023/04/07 22:11:59 2023/04/07
【摘要】 手把手入门Springboot2之Web新手村

SpringBoot使用Interceptor拦截器

拦截器的实现方式

1、继承HandlerInterceptorAdapter的父类

2、实现HandlerInterceptorAdapter接口(推荐方式)

SpringMVC使用拦截器的步骤

1、在session中存储用户信息,用于进行权限验证。

2、实现HandlerInterceptorAdapter接口,重写preHandle()方法

3springMVC.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过滤器

FilterServlet规范中的过滤器,可以处理请求,请求参数,属性。常用在过滤处理字符编码

 

Filter过滤器的使用及原理

如:没一个Servlet都要解决中文乱码问题,也有公共代码,这些代码目前都是重复编写,并没有达到复用的效果。

Filter过滤器是和用户的请求路径对应的。

Filter过滤器可以在Servlet这个目标程序执行之前添加代码。也可以在Servlet执行之后添加代码。

一般在过滤器当中编写公共代码。

Filter对象在服务器启动的时候会新建对象。而Servlet在服务器启动时不会新建对象。

FilterServlet是单例的。

 

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、注册过滤器

2application.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

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。