目录
1.新建拦截器实现 HandlerInterceptor 接口
3.在XML进行拦截器的配置,只放行 user/login请求
5.新建全局异常处理类,实现 HandlerExceptionResolver 接口
拦截请求,常用的就是没登陆的时候,跳至登陆页面。我们这里模拟一下,只让他走登陆接口。
1.新建拦截器实现 HandlerInterceptor 接口
public class AuthorInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 进入Controller前执行
HandlerMethod handlerMethod = (HandlerMethod) handler;
// 方法名
String methodName = handlerMethod.getMethod().getName();
// 类名
String simpleName = handlerMethod.getBean().getClass().getSimpleName();
// 参数
Map<String, String[]> parameterMap = request.getParameterMap();
for (Map.Entry<String,String[]> map:parameterMap.entrySet()) {
System.out.println("k:"+map.getKey());
System.out.println("v:"+map.getValue());
}
if (!StringUtils.equals(methodName,"login")){
throw new NoLoginException("你被拦截了!");
}
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
2.新建一个自定义异常,不是login方法,直接抛
public class NoLoginException extends RuntimeException{
private String message;
public NoLoginException(String message) {
super(message);
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
3.在XML进行拦截器的配置,只放行 user/login请求
<!-- 拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/user/**"/>
<mvc:exclude-mapping path="/user/login"/>
<bean class="com.until.AuthorInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
4.创建方法并测试
@RequestMapping(value = "/queryAll",method = RequestMethod.GET)
public ServerResponse getUser(){
List<User> userList = userService.queryAll();
return ServerResponse.createBySuccess(userList);
}
@RequestMapping(value = "/login",method = RequestMethod.GET)
public ServerResponse login(String name){
List<User> userList = userService.queryAll();
for (User user : userList) {
if (StringUtils.equals(name,user.getName())){
return ServerResponse.createBySuccessMessage("登陆成功");
}
}
return ServerResponse.createBySuccess();
}
5.新建全局异常处理类,实现 HandlerExceptionResolver 接口
对返回前端的信息进行包装
@Component
public class ExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
System.out.println(httpServletRequest.getRequestURI()+"e:"+e);
ModelAndView modelAndView = new ModelAndView(new MappingJacksonJsonView());
modelAndView.addObject("msg","接口异常");
modelAndView.addObject("status",ResponseCode.ERROR.getCode());
modelAndView.addObject("date",e.toString());
return modelAndView;
}
}