在springmvc配置拦截器拦截未登录用户操作

来源:互联网 发布:php会员中心 源码 编辑:程序博客网 时间:2024/05/17 02:23
淮安二傻子 2017-10-24 00:02

在项目里面每个功能基本上都要判断用户是否登录,如果没有登录就要跳转到登录页面,通过拦截器的话只需要写一次,就不需要在每个功能里面再进行判断用户session操作了,简化了开发过程,下面是我配置关于spirngmvc拦截器的过程供大家参考:

1 修改web.xml添加DispatcherServlet相关配置

配置好DispatcherServlet之后,DispatcherServlet会接受所有请求,包括静态资源的请求。

<servlet>

<servlet-name>SpringDispatcher</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>SpringDispatcher</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

在springmvc配置拦截器拦截未登录用户操作

2 过滤掉一些静态请求(包括图片和js)

修改SpringDispatcher-servlet.xml,添加过滤的相关配置

<!-- 过滤下载路径的所有内容 -->

<mvc:resources mapping="/document/**" location="/document/" />

<!-- 过滤所有的css -->

<mvc:resources mapping="/document/**" location="/css/" />

<!-- 过滤所有的js -->

<mvc:resources mapping="/document/**" location="/js/" />

<!-- 过滤所有的图片 -->

<mvc:resources mapping="/document/**" location="/images/" />

在springmvc配置拦截器拦截未登录用户操作

3 在SpringDispatcher-servlet.xml配置拦截器

<mvc:interceptors>

  <mvc:interceptor>

   <mvc:mapping path="/**" />

   <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />

  </mvc:interceptor>

<mvc:interceptor>

  <mvc:mapping path="/**" />

  <bean class="com.claridy.common.util.UserInterceptor" />

</mvc:interceptor>

</mvc:interceptors>

在springmvc配置拦截器拦截未登录用户操作

4 新建UserInterceptor,添加相关判断

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

import com.claridy.domain.WebEmployee;

public class UserInterceptor implements HandlerInterceptor {

@Override

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

WebEmployee webUser = (WebEmployee) request.getSession().getAttribute("sys_user");

String url = request.getRequestURI();

if (StringUtils.isNotBlank(url) && url.toLowerCase().indexOf("login") < 0 && url.toLowerCase().indexOf("validata") < 0) {

if (null == webUser) {

String localUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";

response.sendRedirect(localUrl + "login");

return false;

}else{

return true;

}

}

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 {

}

}

在springmvc配置拦截器拦截未登录用户操作

这个里面首先判断url里面是否包含登录,验证码等相关信息,如果包含就直接跳转不判断,如果不包含继续执行,判断登录用户session是否存在,不存在就跳转到登录页面。

5 测试添加的过滤器是否能够正常跳转

通过debug启动项目

在springmvc配置拦截器拦截未登录用户操作

通过单步调试,发现确实进入了预设的判断,页面跳转到登录画面

在springmvc配置拦截器拦截未登录用户操作

请大家多多关注我的头条号,谢谢大家!

原创粉丝点击