Java web登录拦截器_springmvc interceptor拦截器判断用户是否登录

当我们需要进行用户验证的时候,会使用到springmvc interceptor拦截器判断用户是否登录,如果用户没有正确登录,就需要让用户跳转到登录页面,如果登录,则能正常访问,那么我们该如何使用springmvc拦截器来做这一个功能呢?

springmvc interceptor拦截器和filter过滤器差不多,但是interceptor拦截器只能拦截Controller请求,而filter过滤器功能则更强大一点,本案例需要使用到session域对象来存储用户信息,然后通过自定义springmvc拦截器来拦截URL网址,并判断session里面是否有当前登录用户的信息,下面开始来学习吧!

步骤一:在web.xml文件中设置session过期时间,添加如下代码,session过期时间为20分钟,测试的话可以设置少一点:

20

步骤二:当用户请求controller类中的登录接口的时候,将用户信息存储到session域对象中,代码如下:@PostMapping("user/doLogin")

@ResponseBody

public Map doLogin(HttpSession session,@RequestParam String username,@RequestParam String password){

Map map= new HashMap();

try{

if(!StringUtils.isEmpty(username.trim()) || !StringUtils.isEmpty(password)){

String pwdStr = DigestUtils.md5Hex(password);

Users user = userService.findUserByUsernameAndPwd(username,pwdStr);

if(user != null && user.getPassword().equals(pwdStr)){

map.put("msg", "ok");

//将用户信息存储到key为"LOGIN_USER"的session中

session.setAttribute("LOGIN_USER", user);

return map;

}else{

map.put("msg", "用户名或密码错误!");

}

}else{

map.put("msg", "用户名或密码不能为空!");

}

}catch(Exception ex){

map.put("msg", "系统出错!");

}

return map;

}

步骤三:在spring-mvc.xml视图解析器中添加mvc:interceptors拦截器全局配置,它会匹配所有controller类中定义的请求,代码如下:

步骤四:在controller包下创建LoginInterceptor类,然后继承HandlerInterceptorAdapter类,实现里面的两个方法,代码如下:import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.voa.english.model.Users;

public class LoginInterceptor extends HandlerInterceptorAdapter{

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)

throws Exception {

// TODO Auto-generated method stub

return super.preHandle(request, response, handler);

}

@Override

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,

ModelAndView modelAndView) throws Exception {

// TODO Auto-generated method stub

//super.postHandle(request, response, handler, modelAndView);

//获取当前请求的url

String urlStr = request.getRequestURI();

//从session中获取key为“LOGIN_USER”的用户

Users user = (Users)request.getSession().getAttribute("LOGIN_USER");

//如果session中没有user登录用户信息,并且该请求不是login登录跳转请求的话,才会重定向到登录页面

if(user == null && !urlStr.equals("/admin/user/login")){

response.sendRedirect(request.getContextPath()+"/admin/user/login");

}

}

}

备注:preHandle方法默认返回true,只有返回了true才会进入到postHandle方法,并拦截用户登录信息,做相对应的信息处理。

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/javaweb/664.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java拦截器是在请求到达目标方法之前或之后,对请求进行拦截、处理或修改的一种机制。在SpringMVC中,可以通过实现HandlerInterceptor接口来编写拦截器。 下面是一个实现拦截器的示例: 1. 创建一个类实现HandlerInterceptor接口,并实现其三个方法:preHandle、postHandle和afterCompletion。 ```java public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在请求处理之前进行调用(Controller方法调用之前) System.out.println("拦截器 preHandle 方法被调用"); return true; // 只有返回true才会继续向下执行,返回false取消当前请求 } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后) System.out.println("拦截器 postHandle 方法被调用"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图之后执行(主要用于进行资源清理工作) System.out.println("拦截器 afterCompletion 方法被调用"); } } ``` 2. 在SpringMVC的配置文件中配置拦截器。 ```xml <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.example.MyInterceptor"/> </mvc:interceptor> </mvc:interceptors> ``` 上述代码中,将拦截器配置为对所有请求进行拦截。也可以根据需要进行配置。 通过以上配置,拦截器就可以在请求到达Controller之前、之后和整个请求结束后执行相应的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值