增加springmvc 全局异常处理、拦截器示例代码
This commit is contained in:
@ -1,8 +1,10 @@
|
||||
package com.heibaiying.controller;
|
||||
|
||||
import com.heibaiying.exception.NoAuthException;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
|
||||
/**
|
||||
* @author : heibaiying
|
||||
* @description : hello spring
|
||||
@ -16,4 +18,10 @@ public class HelloController {
|
||||
private String hello() {
|
||||
return "hello";
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping("auth")
|
||||
private void auth() {
|
||||
throw new NoAuthException("没有对应的访问权限!");
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,25 @@
|
||||
package com.heibaiying.exception;
|
||||
|
||||
/**
|
||||
* @author : heibaiying
|
||||
* @description : 自定义无权限异常
|
||||
*/
|
||||
public class NoAuthException extends RuntimeException {
|
||||
|
||||
public NoAuthException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public NoAuthException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public NoAuthException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public NoAuthException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package com.heibaiying.exception;
|
||||
|
||||
import org.springframework.web.servlet.HandlerExceptionResolver;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* @author : heibaiying
|
||||
* @description : 无权限异常处理机制
|
||||
*/
|
||||
public class NoAuthExceptionResolver implements HandlerExceptionResolver {
|
||||
|
||||
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
|
||||
if (ex instanceof NoAuthException && !isAjax(request)) {
|
||||
return new ModelAndView("NoAuthPage");
|
||||
}
|
||||
return new ModelAndView();
|
||||
}
|
||||
|
||||
// 判断是否是Ajax请求
|
||||
private boolean isAjax(HttpServletRequest request) {
|
||||
return "XMLHttpRequest".equalsIgnoreCase(request.getHeader("X-Requested-With"));
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.heibaiying.interceptors;
|
||||
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* @author : heibaiying
|
||||
* @description : spring5 中 preHandle,postHandle,afterCompletion 在接口中被声明为默认方法
|
||||
*/
|
||||
public class MyFirstInterceptor implements HandlerInterceptor {
|
||||
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
|
||||
System.out.println("进入第一个拦截器preHandle");
|
||||
return true;
|
||||
}
|
||||
|
||||
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
|
||||
System.out.println("进入第一个拦截器postHandle");
|
||||
}
|
||||
|
||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
|
||||
System.out.println("进入第一个拦截器afterCompletion");
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.heibaiying.interceptors;
|
||||
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* @author : heibaiying
|
||||
* @description : spring5 中 preHandle,postHandle,afterCompletion 在接口中被声明为默认方法
|
||||
*/
|
||||
public class MySecondInterceptor implements HandlerInterceptor {
|
||||
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
|
||||
System.out.println("进入第二个拦截器preHandle");
|
||||
return true;
|
||||
}
|
||||
|
||||
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
|
||||
System.out.println("进入第二个拦截器postHandle");
|
||||
}
|
||||
|
||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
|
||||
System.out.println("进入第二个拦截器afterCompletion");
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user