增加springmvc 全局异常处理、拦截器示例代码
This commit is contained in:
parent
c54d520737
commit
c3428d4056
@ -1 +0,0 @@
|
|||||||
springmvc-base-annotation
|
|
@ -1,14 +1,21 @@
|
|||||||
package com.heibaiying.config;
|
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.Bean;
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.web.servlet.HandlerExceptionResolver;
|
||||||
import org.springframework.web.servlet.ViewResolver;
|
import org.springframework.web.servlet.ViewResolver;
|
||||||
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
|
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
|
||||||
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
|
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.config.annotation.WebMvcConfigurer;
|
||||||
import org.springframework.web.servlet.view.InternalResourceViewResolver;
|
import org.springframework.web.servlet.view.InternalResourceViewResolver;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author : heibaiying
|
* @author : heibaiying
|
||||||
*/
|
*/
|
||||||
@ -32,8 +39,23 @@ public class ServletConfig implements WebMvcConfigurer {
|
|||||||
/**
|
/**
|
||||||
* 配置静态资源处理器
|
* 配置静态资源处理器
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
|
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
|
||||||
configurer.enable();
|
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;
|
package com.heibaiying.controller;
|
||||||
|
|
||||||
|
import com.heibaiying.exception.NoAuthException;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
|
||||||
@ -16,4 +17,10 @@ public class HelloController {
|
|||||||
private String hello() {
|
private String hello() {
|
||||||
return "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>
|
<artifactId>spring-webmvc</artifactId>
|
||||||
<version>${spring-base-version}</version>
|
<version>${spring-base-version}</version>
|
||||||
</dependency>
|
</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>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
@ -1,8 +1,10 @@
|
|||||||
package com.heibaiying.controller;
|
package com.heibaiying.controller;
|
||||||
|
|
||||||
|
import com.heibaiying.exception.NoAuthException;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author : heibaiying
|
* @author : heibaiying
|
||||||
* @description : hello spring
|
* @description : hello spring
|
||||||
@ -16,4 +18,10 @@ public class HelloController {
|
|||||||
private String hello() {
|
private String hello() {
|
||||||
return "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"/>
|
<property name="suffix" value=".jsp"/>
|
||||||
</bean>
|
</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>
|
</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