增加springmvc 全局异常处理、拦截器示例代码
This commit is contained in:
parent
c54d520737
commit
c3428d4056
@ -1 +0,0 @@
|
||||
springmvc-base-annotation
|
@ -1,14 +1,21 @@
|
||||
package com.heibaiying.config;
|
||||
|
||||
import com.heibaiying.exception.NoAuthExceptionResolver;
|
||||
import com.heibaiying.interceptors.MyFirstInterceptor;
|
||||
import com.heibaiying.interceptors.MySecondInterceptor;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.HandlerExceptionResolver;
|
||||
import org.springframework.web.servlet.ViewResolver;
|
||||
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
|
||||
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
import org.springframework.web.servlet.view.InternalResourceViewResolver;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author : heibaiying
|
||||
*/
|
||||
@ -32,8 +39,23 @@ public class ServletConfig implements WebMvcConfigurer {
|
||||
/**
|
||||
* 配置静态资源处理器
|
||||
*/
|
||||
|
||||
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
|
||||
configurer.enable();
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加自定义拦截器
|
||||
*/
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
registry.addInterceptor(new MyFirstInterceptor()).addPathPatterns("/mvc/**").excludePathPatterns("mvc/login");
|
||||
registry.addInterceptor(new MySecondInterceptor()).addPathPatterns("/mvc/**");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 添加全局异常处理器
|
||||
*/
|
||||
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
|
||||
resolvers.add(new NoAuthExceptionResolver());
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.heibaiying.controller;
|
||||
|
||||
import com.heibaiying.exception.NoAuthException;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
@ -16,4 +17,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");
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
|
||||
<html>
|
||||
<head>
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
没有对应的访问权限!
|
||||
</body>
|
||||
</html>
|
@ -39,6 +39,22 @@
|
||||
<artifactId>spring-webmvc</artifactId>
|
||||
<version>${spring-base-version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<version>4.0.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>fastjson</artifactId>
|
||||
<version>1.2.54</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
<version>27.0.1-jre</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -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");
|
||||
}
|
||||
}
|
@ -24,4 +24,21 @@
|
||||
<!-- 后缀 -->
|
||||
<property name="suffix" value=".jsp"/>
|
||||
</bean>
|
||||
|
||||
<!--配置拦截器-->
|
||||
<mvc:interceptors>
|
||||
<mvc:interceptor>
|
||||
<mvc:mapping path="/mvc/**"/>
|
||||
<mvc:exclude-mapping path="/mvc/login"/>
|
||||
<bean class="com.heibaiying.interceptors.MyFirstInterceptor"/>
|
||||
</mvc:interceptor>
|
||||
<mvc:interceptor>
|
||||
<mvc:mapping path="/mvc/**"/>
|
||||
<bean class="com.heibaiying.interceptors.MySecondInterceptor"/>
|
||||
</mvc:interceptor>
|
||||
</mvc:interceptors>
|
||||
|
||||
<!--配置全局异常处理器-->
|
||||
<bean class="com.heibaiying.exception.NoAuthExceptionResolver"/>
|
||||
|
||||
</beans>
|
@ -0,0 +1,9 @@
|
||||
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
|
||||
<html>
|
||||
<head>
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
没有对应的访问权限!
|
||||
</body>
|
||||
</html>
|
Loading…
x
Reference in New Issue
Block a user