springboot-過濾器&攔截器&模板引擎

一、過濾器
首先在啓動類加註解

@SpringBootApplication
@ServletComponentScan    //用於進行servlet組件掃描
public class Springboot03Application {

    public static void main(String[] args) {
        SpringApplication.run(Springboot03Application.class, args);
    }

}
/**
 * 基於servlet3.x版本的過濾器,所以需要使用註解
 */
@WebFilter(urlPatterns = "/api/*", filterName = "loginFilter")
public class UserFilter implements Filter {


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化操作-----------");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        //獲取用戶名
        String name = request.getParameter("name");
        
        //如果獲取的用戶名與給定的用戶名相同,則放行
        if("jack".equals(name)){
            filterChain.doFilter(servletRequest,servletResponse);//如果當前名字是Jack,則放行
        }else{
            response.sendRedirect("/login.html");
        }
    }

    @Override
    public void destroy() {
        System.out.println("銷燬操作-------");
    }
}

二、自定義攔截器

  • 1、自定義攔截器類,實現 HandlerInterceptor 接口
    preHandle :調用Controller某個方法之前
    postHandle :Controller之後調用,視圖渲染之前,若控制器Controller出現異常,則不執行此方法
    afterCompletion :不管有沒有異常,這個afterCompletion都會被調用,用於資源清理
@Component
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");
        return true;   //false代表攔截   true代表放行
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion");
    }
}
  • 2、自定義類加註解 @Configuration並實現 WebMvcConfigurer 接口類,重寫addInterceptors(){}
/**
 * 自定義攔截器
 */
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

    @Autowired
    private LoginInterceptor loginInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        System.out.println("addInterceptors");
        registry.addInterceptor(loginInterceptor).addPathPatterns("/api/*/**");
    }
}
  • 3、將1中的自定義攔截器加入到步驟2中的addInterceptors(){}方法中。

附:攔截器失效原因:
1)檢查是否有註解@Configuration
2)攔截路徑是否有 ** 和 *
3)攔截器最後路徑一定要是 “/**”, 如果是目錄的話則是 /*/

三、模板引擎 thymeleaf 與 freemark

  1. Freemarker Template Lanaguage (FTL) 文件後綴是.ftl
    特點:嚴格依賴MVC模式,不依賴Servlet容器。不消耗性
    基礎配置:
#freemarker基礎配置
# 是否開啓thymeleaf緩存,本地爲false,生產建議爲true
spring.freemarker.cache=false

spring.freemarker.charset=UTF-8
spring.freemarker.allow-request-override=false
spring.freemarker.check-template-location=true

#類型
spring.freemarker.content-type=text/html

spring.freemarker.expose-request-attributes=true
spring.freemarker.expose-session-attributes=true

#文件後綴
spring.freemarker.suffix=.ftl
#路徑
spring.freemarker.template-loader-path=classpath:/templates/

引入freemarker模板引擎的依賴

<!-- 引入freemarker模板引擎的依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
  1. Thymeleaf(springboot 主推)
    特點:輕量級模板引擎,頁面有複雜業務,不推薦使用。比如頁面有很多個判斷(會導致解析DOM或者XML佔用過多內存)。
    基礎配置:
#thymeleaf基礎配置

#開發時關閉緩存,不然沒法看到實時頁面
spring.thymeleaf.cache=false
spring.thymeleaf.mode=HTML5
#前綴
spring.thymeleaf.prefix=classpath:/templates/
#編碼
spring.thymeleaf.encoding=UTF-8
#類型
spring.thymeleaf.servlet.content-type=text/html
#名稱的後綴
spring.thymeleaf.suffix=.html

引入thymeleaf相關maven依賴

<!--thymeleaf相關maven依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章