@ControllerAdvice -- 处理异常示例
Class : SessionInterceptor
package com.estate.web.filter; import javax.annotation.Resource;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import com.ucenter.api.exception.SessionException;
import com.ucenter.api.exception.SignatureException;
import com.ucenter.api.exception.TimeOutException;
import com.ucenter.api.session.bean.Result;
import com.ucenter.api.session.service.IWebSessionService; public class SessionInterceptor extends HandlerInterceptorAdapter {
@Resource
private IWebSessionService webSessionService; @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 从request中获取sessionid
String sessionid = request.getParameter("sessionid");
if (StringUtils.isBlank(sessionid)) {
// 从cookies中获取sessionid
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("sessionid".equals(cookie.getName())) {
sessionid = cookie.getValue();
}
}
}
}
if (StringUtils.isBlank(sessionid))
throw new SessionException();
// 获取时间戳
long timestamp = NumberUtils.toLong(request.getParameter("timestamp"), 0);
if (timestamp <= 0)
throw new TimeOutException();
// 获取签名
String signature = request.getParameter("signature");
if (StringUtils.isBlank(signature))
throw new SignatureException();
// dubbo校验
Result result = webSessionService.checkSessionid(sessionid, signature, timestamp); // 校验成功,将sessionid放入request对象中
request.setAttribute("sessionid", sessionid);
request.setAttribute("ecid", result.getEcid());
request.setAttribute("uid", result.getUid());
return true; } @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
}
Class : GlobalExceptionHandler
package com.xindatai.ibs.web.exception; import java.io.IOException; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.ucenter.api.exception.SessionException;
import com.ucenter.api.exception.SignatureException;
import com.ucenter.api.exception.TimeOutException;
import com.xindatai.common.web.resp.BaseRespWriter; @ControllerAdvice
public class GlobalExceptionHandler {
public static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "IOException occured")
@ExceptionHandler(IOException.class)
@ResponseBody
public void handleIOException() {
// returning 404 error code
} @ResponseStatus(HttpStatus.OK)
@ResponseBody
@ExceptionHandler(TimeOutException.class)
public void timeOutException(HttpServletRequest request, HttpServletResponse response, TimeOutException ex) throws IOException {
outputMessage(response, JSON.toJSONString(ex.getWriter(), SerializerFeature.DisableCircularReferenceDetect));
// return JSON.toJSONString(ex.getWriter(), SerializerFeature.DisableCircularReferenceDetect);
} @ResponseStatus(HttpStatus.OK)
@ResponseBody
@ExceptionHandler(SessionException.class)
public void sessionException(HttpServletRequest request, HttpServletResponse response, SessionException ex) throws IOException {
outputMessage(response, JSON.toJSONString(ex.getWriter(), SerializerFeature.DisableCircularReferenceDetect));
// return JSON.toJSONString(ex.getWriter(), SerializerFeature.DisableCircularReferenceDetect);
} // @ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
@ExceptionHandler(SignatureException.class)
public void tokenException(HttpServletRequest request, HttpServletResponse response, SignatureException ex) throws IOException {
outputMessage(response, JSON.toJSONString(ex.getWriter(), SerializerFeature.DisableCircularReferenceDetect));
} @ExceptionHandler
@ResponseBody
public void handleException(HttpServletRequest request, HttpServletResponse response, Exception e) throws IOException {
LOGGER.error("API Exception! ", e);
BaseRespWriter writer = new BaseRespWriter();
writer.setErrMsg("API Exception!");
outputMessage(response, JSON.toJSONString(writer));
} @ResponseStatus(HttpStatus.OK)
@ResponseBody
@ExceptionHandler(BindException.class)
public void bindException(HttpServletRequest request, HttpServletResponse response, Exception e) throws IOException {
LOGGER.error("Param Exception! ", e);
BaseRespWriter writer = new BaseRespWriter();
writer.setErrMsg("Param Exception!");
outputMessage(response, JSON.toJSONString(writer));
} private void outputMessage(HttpServletResponse response, String errMsg) throws IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/json");
ServletOutputStream os = response.getOutputStream();
os.write(errMsg.getBytes("utf-8"));
} }
啦啦啦
@ControllerAdvice -- 处理异常示例的更多相关文章
- @ControllerAdvice 拦截异常并统一处理(转载)
在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...
- @ControllerAdvice全局异常拦截
@ControllerAdvice 拦截异常并统一处理 在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder ...
- Spring Boot 系列(八)@ControllerAdvice 拦截异常并统一处理
在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...
- Spring Boot 系列 @ControllerAdvice 拦截异常并统一处理
ControllerAdvice用法解析 简介 通过@ControllerAdvice注解可以将对于控制器的全局配置放在同一个位置. 注解了@Controller的类的方法可以使用@Exception ...
- @ControllerAdvice 拦截异常并统一处理
在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...
- 精通Spring Boot---使用@ControllerAdvice处理异常
在Spring 3.2中,新增了@ControllerAdvice.@RestControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@Mode ...
- SpringBoot - @ControllerAdvice 处理异常
在Spring 3.2中,新增了@ControllerAdvice.@RestControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@Mode ...
- 使用@ControllerAdvice处理异常
在Spring 3.2中,新增了@ControllerAdvice.@RestControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@Mode ...
- SpringBoot 之 @ControllerAdvice 拦截异常并统一处理
在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...
随机推荐
- Hbase 学习(七) rowkey设计
一直以来对rowkey的设计都比较迷茫,<hbase权威指南>倒是给出了个还算靠谱的例子. 下面这个例子有点儿像帖子表结构,它的rowkey设计是这样的,可以简单的理解为,什么人在什么时间 ...
- go channel例子
channel初步认识: package main import "fmt" import "time" func main() { c := make(cha ...
- ECS Linux服务器xfs磁盘扩容
ECS Linux服务器xfs磁盘扩 ECS Linux服务器xfs磁盘使用阿里云官方提供的磁盘扩容方法扩容会有报错: [root@iZ28u04wmy2Z ~]# e2fsck /dev/xvdb1 ...
- Graph-BFS-图的广度优先遍历
#include <iostream> #include <queue> using namespace std; /* 5 5 1 2 1 3 1 5 2 4 3 5 1 2 ...
- 引入css少引入了rel="stylesheet" 这行代码。导致整个页面空白、
忘记引入rel="stylesheet" 如下: <link href="css/swiper-3.3.1.min.css" /> 这样使得整个页 ...
- R语言学习笔记 (入门知识)
R免费使用:统计工具:# 注释,行注释块注释:anything="这是注释的内容"常用R语言编辑器:Rsutdio,Tinn-R,Eclipse+StatET:中文会有乱码帮助:? ...
- 00-01.PHP 网站假设win7配置自己的IIS服务器亲自做的图文很详细 [转 - 赞 ]
win7配置自己的IIS服务器亲自做的图文很详细 分步阅读 跟人网站爱好初学者必看的win7系统配置自己的IIS,可以在你自己的电脑上配置网站服务器发不到网上,下面就跟着我的步骤一起做吧100%成功. ...
- 【Python】#!/usr/bin/python 作用
脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它 #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器.#! ...
- php 保存文件
$data = file_get_contents("data/3.txt"); $ary = split(',',$data); $test2=serialize($ary); ...
- 如何屏蔽Chrome、Safari等Webkit内核浏览器文本框和文本域的高亮边框、可变大小等自动外观处理
1.高亮外框的取消 input { outline: none; } textarea { outline: none; } 如上,使用CSS的outline就可以实现 2.文本域缩放功能的取消 也是 ...