springMVC 拦截器
只能拦截方法,不能拦截页面,因为跳转页面在前端就做了,压根没走后台
步骤
1,继承 HandlerInterceptor 接口,实现拦截器
public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // session 有 user 就说明登陆了,反之则未登录 Object user = request.getSession().getAttribute("user"); if(user == null) { // 放过请求 return false; } // 拦截请求 return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
2,springMVC 配置文件配置拦截器,指明需要拦截和不需要拦截的方法,指明拦截器
<!-- 配置拦截器 --> <mvc:interceptors> <mvc:interceptor> <!-- 拦截部分请求:goods 下的请求 --> <!-- <mvc:mapping path="/goods/*" /> --> <!-- 拦截所有请求 --> <mvc:mapping path="/**" /> <!-- 特定的方法不拦截 --> <mvc:exclude-mapping path="/users" /> <!-- 拦截器 class --> <bean class="com.weipai.interceptor.LoginInterceptor" /> </mvc:interceptor> </mvc:interceptors>
3,控制层测试方法
@RestController @RequestMapping("users") public class UserController { /** * .没有做请求映射,当访问 /users 默认就会组这个方法 * .虽然配了所有方法被拦截,但是指明了这个方法不被拦截 */ @GetMapping public String getAll() { System.out.println("所有用户"); return "所有用户"; } // 前面配置的所有方法被拦截,这个方法要被拦截 @GetMapping("/{userId}") public String getOne(@PathVariable(value="userId") String userId) { System.out.println(userId); return "id 为 " + userId + " 的用户"; } }