Java web登录拦截器_JAVA Spring web mvc 学习 之 7:拦截器(登录状态验证)

先做个总结:

拦截器用于在服务器收到请求后对请求进行过滤,是否响应做出判断等。

1.因为在实现上,不可能神马都拦截,所以首先自定义一个拦截器,这个拦截器类要实现org.springframework.web.servlet.HandlerInterceptor

2.在拦截器中,有preHandle、afterCompletion、postCompletion 三个方法,其中 preHandle是在服务器开始响应之前就执行,post是在pre返回true、控制器调用完后执行,after在pre返回true、整个请求完成后执行

3.在spring配置中指定拦截器mvc:interceptors,以及需进行拦截的路径

关键步骤:

1.实现拦截器 HandlerInterceptor 接口

/**

* 拦截器必须实现HandlerInterceptor接口

* */

public class AuthorizationInterceptor  implements org.springframework.web.servlet.HandlerInterceptor {

// 不拦截"/loginForm"和"/login"请求

private static final String[] IGNORE_URI = {"/loginForm", "/login"};

/**

* 该方法将在整个请求完成之后执行, 主要作用是用于清理资源的,

* 该方法也只能在当前Interceptor的preHandle方法的返回值为true时才会执行。

*/

@Override

public void afterCompletion(HttpServletRequest request,

HttpServletResponse response, Object handler, Exception exception)

throws Exception {

System.out.println("AuthorizationInterceptor afterCompletion --> ");

}

/**

* 该方法将在Controller的方法调用之后执行, 方法中可以对ModelAndView进行操作 ,

* 该方法也只能在当前Interceptor的preHandle方法的返回值为true时才会执行。

*/

@Override

public void postHandle(HttpServletRequest request, HttpServletResponse response,

Object handler, ModelAndView mv) throws Exception {

System.out.println("AuthorizationInterceptor postHandle --> ");

}

/**

* preHandle方法是进行处理器拦截用的,该方法将在Controller处理之前进行调用,

* 该方法的返回值为true拦截器才会继续往下执行,该方法的返回值为false的时候整个请求就结束了。

*/

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response,

Object handler) throws Exception {

System.out.println("AuthorizationInterceptor preHandle --> ");

// flag变量用于判断用户是否登录,默认为false

boolean flag = false;

//获取请求的路径进行判断

String servletPath = request.getServletPath();

// 判断请求是否需要拦截

for (String s : IGNORE_URI) {

if (servletPath.contains(s)) {

flag = true;

break;

}

}

// 拦截请求

if (!flag){

// 1.获取session中的用户

User user = (User) request.getSession().getAttribute("user");

// 2.判断用户是否已经登录

if(user == null){

// 如果用户没有登录,则设置提示信息,跳转到登录页面

System.out.println("AuthorizationInterceptor拦截请求:");

request.setAttribute("message", "请先登录再访问网站");

request.getRequestDispatcher("loginForm").forward(request, response);

}else{

// 如果用户已经登录,则验证通过,放行

System.out.println("AuthorizationInterceptor放行请求:");

flag = true;

}

}

return flag;

}

}

2.在spring中配置拦截

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值