通過HandlerInterceptor接口實現攔截器功能


實現攔截器的方式有好多種  這里我分享一種實現

HandlerInterceptor接口的方式  費話不多說  上代碼

 

以登錄攔截為例子

1、實現接口 LoginInterceptor implements HandlerInterceptor

 

 2、重寫preHandler

 

             String accessToken = request.getHeader("token");

 

            if(accessToken == null){

 

                accessToken = request.getParameter("token");

 

            }

 

            if (accessToken != null ) {

 

                Claims claims = JWTUtils.checkJWT(accessToken);

 

                Integer id = (Integer)claims.get("id");

 

                String  name = (String)claims.get("name");

 

                request.setAttribute("user_id",id);

 

                request.setAttribute("name",name);

 

                //普通用戶

 

                return true;

 

 

            }

 

            return false;

 

 

以上1、2點形成的類

package com.cm.weixin.pay.interceoter;

import com.cm.weixin.pay.domain.JsonData;
import com.cm.weixin.pay.utils.JwtUtils;
import com.github.pagehelper.StringUtil;
import com.google.gson.Gson;
import io.jsonwebtoken.Claims;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class LoginIntercepter implements HandlerInterceptor {
private static final Gson gSon=new Gson();
/**
* 進入controller之前進行攔截
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("token");
if(token==null){
token=request.getParameter("token");
}
if(token!=null){
Claims claims=JwtUtils.checkJwt(token);
Integer userid= (Integer) claims.get("id");
String name = (String) claims.get("name");

request.setAttribute("user_id",userid);
request.setAttribute("name",name);
return true;
}
sendJsonMessage(response, JsonData.buildError("請登錄"));
return false;
}


/**
* 相應數據給前端
*/
public static void sendJsonMessage(HttpServletResponse response,Object obj){
response.setContentType("application/json;charset=utf-8");
PrintWriter writer = null;
try {
writer = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
writer.print(gSon.toJson(obj));
writer.close();
try {
response.flushBuffer();
} catch (IOException e) {
e.printStackTrace();
}

}
}

 

3、配置攔截器

此配置主要是根據url進行攔截 可以自行配置靈活運用

 

@Configuration

 

        InterceptorConfig implements WebMvcConfigurer

 

 

         @Override

 

        public void addInterceptors(InterceptorRegistry registry) {

 

 

            registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/user/api/v1/*/**");

 

 

            WebMvcConfigurer.super.addInterceptors(registry);

 

        }

 

完整的配置類

package com.cm.weixin.pay.config;

import com.cm.weixin.pay.interceoter.LoginIntercepter;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
* 攔截器配置
*/
@Configuration
public class IntercepterConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginIntercepter())
.addPathPatterns("/user/api/v1/*/**");
WebMvcConfigurer.super.addInterceptors(registry);


}
}

 

 

4、貼出做測試的類

 

package com.cm.weixin.pay.controller;

import com.cm.weixin.pay.domain.JsonData;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user/api/v1")
public class OrderController {
@RequestMapping("add")
public JsonData saveOrder(){
return JsonData.buildSuccess("下單成功");
}
}

 

本文結尾:在1、2點形成的類里面我貼出的第二個方法是響應前端數據的一種寫法 此寫法我自認為很好用  請自行測試腦補!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM