springboot 实现拦截器权限过滤,以及用拦截器实现操作日志功能
来源:互联网 发布:指纹膜 淘宝 编辑:程序博客网 时间:2024/06/07 11:34
package com.hcmony.web.interceptor;import com.hcmony.service.auth.ValidationService;import com.hcmony.service.auth.impl.ValidationServiceImpl;import org.apache.log4j.Logger;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.web.context.support.WebApplicationContextUtils;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * <h3>权限拦截</h3> * <p></p> * * @author hcmony * @since V1.0.0, 2017/12/15 18:13 */@Configurationpublic class AuthInterceptor extends HandlerInterceptorAdapter { private final Logger logger = Logger.getLogger(AuthInterceptor.class); @Autowired private ValidationService validationService; //这个service可以用db或者缓存取数据查询 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //todo 后面具体实现 此处后面可以做日志操作记录 String token = request.getHeader("token"); if(token==null){ request.getRequestDispatcher("/notLogin").forward(request,response); return false; } //假如无法注入的情况下 if(validationService==null){ BeanFactory factory = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext()); validationService = (ValidationServiceImpl) factory.getBean("validationServiceImpl"); }String user = (String) validationService.verifyAccessToken(token); if(user==null){ request.getRequestDispatcher("/noAuth").forward(request,response); return false; } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // log.info("在Controller请求处理之后进行调用,但是在视图被渲染之前"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // log.info("在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图之后执行(主要是用于进行资源清理工作)"); }}
阅读全文