SpringBoot 攔截器 && 攔截之后返回前台自定義格式


1、加入 阿里的 json jar包

<!--json jar相關jar包-->

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.7</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.7</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.23</version>
</dependency>

本文需要jar依賴 如圖 - >

 

 

 

攔截之后返回的效果->

 

 

 新建 config 包 並新建 InterceptorConfig  配置類 類上面添加 @Configuration 注解 表示是一個配置類

package com.pigs.springbootpigsinterceptor.config;

import com.pigs.springbootpigsinterceptor.interceptor.HomeInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
* @author PIGS
*
* 攔截 路徑
*/
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

/**
* 攔截 類
*/
@Autowired
private HomeInterceptor homeInterceptor;

/**
* 這個方法用來注冊攔截器,寫好的攔截器需要通過這里添加注冊才能生效
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {

/**
* 表示攔截所有的請求,
* addPathPatterns("/**");
* excludePathPatterns("/login", "/register")
* 表示除了登陸與注冊之外,因為登陸注冊不需要登陸也可以訪問excludePathPatterns("/login", "/register")
*
*
*/
registry.addInterceptor(homeInterceptor).addPathPatterns("/home");

}


}

 

 

 

新建 一個攔截類

HomeInterceptor 在類上面添加 @Component 注解 交給spring 容器管理 並實現 HandlerInterceptor  類
 
        

 

 

 

 

 

 

 代碼 ->

package com.pigs.springbootpigsinterceptor.interceptor;

import com.alibaba.fastjson.JSON;
import com.pigs.springbootpigsinterceptor.util.ResultUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

/**
*
* 攔截器
*
* @author PIGS
*/
@Component
public class HomeInterceptor implements HandlerInterceptor {

private static final Logger logger = LoggerFactory.getLogger(HomeInterceptor.class);

/**
* 判斷session 是否有值
*
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

String userName = (String) request.getSession().getAttribute("userName");
logger.info("userName={}",userName);

if (userName==null){
String result = JSON.toJSONString(ResultUtil.error(101, "你還沒有登錄哦!"));
returnJson(response, result);
return false;
}


return true;
}

/**
* 返回客戶端數據
*/
private void returnJson(HttpServletResponse response, String result) throws Exception {
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=utf-8");
try {
writer = response.getWriter();
writer.print(result);

} catch (IOException e) {
} finally {
if (writer != null) {
writer.close();
}
}

}


/**
* 處理請求完成后視圖渲染之前的處理操作
*
* @param httpServletRequest
* @param httpServletResponse
* @param o
* @param modelAndView
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object
o, ModelAndView modelAndView) throws Exception {

}


/**
* 視圖渲染之后的操作
*
* @param httpServletRequest
* @param httpServletResponse
* @param o
* @param e
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse
httpServletResponse, Object o, Exception e) throws Exception {

}


}

自定義返回格式 ResultFormat 類 ->

 

 

 代碼->

package com.pigs.springbootpigsinterceptor.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;

/**
* @author PIGS-豬農·楊
* @version 1.0
* @date 2020/2/17 14:41
* 統一返回格式
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class ResultFormat<T> {
/**
* 錯誤碼
*/
private Integer code;

/**
* 提示信息
*/
private String msg;

/**
* 內容
*/
private T data;

}
 
        
ResultUtil返回工具類 ->

 

 

代碼->

package com.pigs.springbootpigsinterceptor.util;

import com.pigs.springbootpigsinterceptor.entity.ResultFormat;
import org.springframework.beans.factory.annotation.Autowired;

/**
* @author PIGS-豬農·楊
* @version 1.0
* @date 2020/2/17 14:53
* 統一返回工具類
*/
public class ResultUtil {


public static ResultFormat success(Object object) {
ResultFormat result =new ResultFormat();
result.setCode(200);
result.setMsg("成功");
result.setData(object);
return result;
}

public static ResultFormat success() {
return success(null);
}

public static ResultFormat error(Integer code, String msg) {
ResultFormat result =new ResultFormat();
result.setCode(code);
result.setMsg(msg);
return result;
}

}


已經托管 碼雲
https://gitee.com/pig_farmer_x/springboot/blob/master/springboot-pigs-interceptor.zip



免責聲明!

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



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