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 + " 的用户";
    }
}
原文地址:https://www.cnblogs.com/huanggy/p/9510652.html