最新消息:关注【太平洋学习网】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

springmvc interceptor拦截器判断用户是否登录

Javaweb 太平洋学习网 浏览 评论

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

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

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

<session-config>
	<session-timeout>20</session-timeout>
</session-config>

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

@PostMapping("user/doLogin")
@ResponseBody
public Map<String,Object> doLogin(HttpSession session,@RequestParam String username,@RequestParam String password){
	Map<String,Object> map= new HashMap<String, Object>();
	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类中定义的请求,代码如下:

<!-- 登录拦截器 -->
<mvc:interceptors>
	<bean class="com.voa.english.controller.LoginInterceptor"/>
</mvc:interceptors>

步骤四:在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/2018/0710/664.html

    与本文相关的文章

    发表我的评论
    取消评论

    表情

    您的回复是我们的动力!

    • 昵称 (必填)

    网友最新评论