您的位置:首页 > 编程语言 > Java开发

Java自定义拦截器详细教程

2018-10-31 10:59 405 查看

前言

Java编程中经常会有一些需要我们进行登录拦截的操作,或者实现,那么怎么用java代码实现一个拦截器呢?一般情况下实现拦截器需要两步,今天就给大家演示一个拦截器,废话不多说,代码+注释直接奉上!

第一步:自定义拦截器

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;

/**
*自定义拦截器
*实现HandlerInterceptor接口
**/
public class LoginInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// 获取作用域的user信息,此user信息需要在登录操作的同事放到作用域,以便于此处获取
String user=(String) request.getSession().getAttribute("user");
//获取请求的路径
String url=request.getRequestURI();
//打印路径信息,作为后台日志进行查看
System.out.println(url);
//判断user对象的内容是否不为空;
//或者是否是访问的后台登录方法(login);
//因为我的页面直接导入的easyUI的js包为防止把页面样式拦截,所以加个判断,如果不是这样的话此判断可以省略
if(user!=null|url.endsWith("项目名/login")|url.lastIndexOf("jquery-easyui-1.4")>-1) {
return HandlerInterceptor.super.preHandle(request, response, handler);
}else {
//判断没通过,证明用户没有进行登录操作,操作非法,进行返回登录页面(login.jsp)进行登录
//返回错误提示信息("请先登录!")
request.getSession().setAttribute("msg", "请先登录!");
response.sendRedirect("login.jsp");
return false;
}
}
}

第二步:拦截器注册类,使拦截器生效

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 使拦截器生效1.此处参数是我们自定义的拦截器名( LoginInterceptor ) 2.添加拦截规则(/**)拦截全部
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**");
WebMvcConfigurer.super.addInterceptors(registry);
}

}

控制层代码

//登录验证是否是name='zhangsan',pwd='123' 的用户
@RequestMapping("login")
public String doLogin(String name,String pwd,HttpServletRequest request) {
//从请求中获取登录名信息,放到user对象,并放入作用域中,方便拦截器获取
request.getSession().setAttribute("user", name);
//判断用户名和密码是否正确,此处也可以进行后台数据库的查询,我为了简单写死了登录名和密码
if(name.equals("zhangsan")&&pwd.equals("123")) {
//用户名和密码正确重定向到跳转页面的后台方法
return "redirect:toPageList";
}else {
// 登录失败,返回提示信息
request.getSession().setAttribute("msg", "账号或密码错误!");
//返回登录页面,重新登录
return "login";
}
}
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: