SpringMVC读取Cookie判断用户是否登录,对每一个action都要进行判断。之前使用jstl标签在页面上判断session如果没有登录就使用如下代码跳转到登录页面。

<c:if test="${sessionScope.login == null || sessionScope.login == false}">
<!-- 未登录 -->
<c:redirect url="/login"/>
</c:if>
<c:if test="${sessionScope.login}">
<!-- 已登录 -->
</c:if>

但是测试发现如果session过期,页面渲染就会无故中断并且不会跳转到登录页面。故尝试使用拦截器来进行登录判断。

拦截器配置文件如下

<!-- <mvc:mapping path="/**" /> 如果只写一个*,则不能拦截类似/*/*的请求。静态资源的请求需要判断不进行拦截 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.ts.settle.tools.interceptor.LoginInterceptor">
<property name="excludedUrls">
<list>
<value>/login</value>
<value>/static/</value>
</list>
</property>
</bean>
</mvc:interceptor>
</mvc:interceptors>

拦截器实现类如下

public class LoginInterceptor implements HandlerInterceptor {
private AvatarLogger logger = AvatarLoggerFactory.getLogger(this.getClass()); private List<String> excludedUrls; /**
* 在DispatcherServlet完全处理完请求后被调用
* 当拦截器抛出异常时,依然会从当前拦截器往回执行所的拦截器的afterCompletion()
*/
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception exception)
throws Exception { } //在业务处理器处理请求执行完成后,生成视图之前执行的动作
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception { } /**
* 在业务处理器处理请求之前被调用
* 如果返回false 则退出本拦截器,本拦截器后面的postHandle与afterCompletion不再执行
*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception { String requestUri = request.getRequestURI();
for (String url : excludedUrls) {
if (requestUri.contains(url)) {
return true;
}
} HttpSession session = request.getSession();
Boolean login = (Boolean) session.getAttribute("login");
if (login == null || !login) {
//System.out.println(request.getContextPath());
logger.info("Pedirect to login page");
response.sendRedirect(request.getContextPath() + "/login");
}
return true;
} public void setExcludedUrls(List<String> excludedUrls) {
this.excludedUrls = excludedUrls;
}
}

SpringMVC配置拦截器实现登录控制的更多相关文章

  1. springmvc 配置拦截器

    package com.aaa.zxf.interceptor; import org.springframework.boot.autoconfigure.SpringBootApplication ...

  2. SpringMVC之拦截器实现登录验证

    今天回头看之前发的javaweb学习路线图,发现把路线图中的也学的有一半多了,不过还是路漫漫.在前面的博客中有学习过spring的aop,它利用动态代理实现,在springmvc中也是一样,今天使用H ...

  3. springMVC配置拦截器、过滤器、前端控制器时遇到的问题总结

    1.业务场景:使用vuejs+springMVC+spring框架搭建一个mis系统,集成SSO单点登录: 2.遇到问题:使用interceptor拦截器配置SSO单点登录,直接敲域名,或者ip+端口 ...

  4. SpringMvc配置拦截器

    SpringMVC可以通过配置拦截器,进行url过滤等处理. 在spring-mvc.xml的配置文件中,如下示: 其中,在<mvc:interceptors>中可以配置多个拦截器< ...

  5. springMvc配置拦截器无效

    说明 springMvc配置国际化拦截器失败,点击页面按钮切换中英文无效,排查发现没有进入 LocaleChangeInterceptor 类中,判断拦截器没有起作用,那么是什么原因导致拦截器无效,通 ...

  6. springmvc 自定义拦截器实现未登录用户的拦截

    第一步:编写自定义拦截器类,该类继承HandlerInterceptorAdapter,重写preHandle方法  第二步:配置springmvc.xml文件,定义拦截器属性  登录请求的mappi ...

  7. springboot+springmvc拦截器做登录拦截

    springboot+springmvc拦截器做登录拦截 LoginInterceptor 实现 HandlerInterceptor 接口,自定义拦截器处理方法 LoginConfiguration ...

  8. springmvc中拦截器配置格式

    对于springmvc,有两种方式配置拦截器. 一是实现HandlerInterceptor接口,如 public class MyInterceptor1 implements HandlerInt ...

  9. Struts_登录练习(配置拦截器)

    需求:类似过滤器看有没有登录,没登陆就返回登陆界面,在上文基础上实现 1.新建拦截器 2.配置拦截器 3.完成.

随机推荐

  1. Nova 组件如何协同工作 - 每天5分钟玩转 OpenStack(24)

    Nova 物理部署方案 前面大家已经看到 Nova 由很多子服务组成,同时我们也知道 OpenStack 是一个分布式系统,可以部署到若干节点上,那么接下来大家可能就会问: Nova 的这些服务在物理 ...

  2. debian/ubuntu安装桌面环境

    apt-get install xorg apt-get install gnome 然后startx ubuntu 安装Gnome桌面 1.安装全部桌面环境,其实Ubuntu系列桌面实际上有几种桌面 ...

  3. [WPF系列]-数据邦定之DataTemplate 使用 DataTrigger 来应用属性值

    使用 DataTrigger 来应用属性值 当前表示不会告诉我们某个 Task 是家庭任务还是办公室任务.记住 Task 对象拥有类型为 TaskType 的 TaskType 属性,该类型是一个枚举 ...

  4. 浅谈Java中的equals和==

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...

  5. Url和Uri的区别

    URL: URL是Uniform Resoure Locator(统一资源定位器)的缩写.就是WWW页的地址. 其URL地址格式排列为:scheme://host:Port/path其中 ·Inter ...

  6. 脏检查and刷新机构

    ---恢复内容开始--- 脏检查:当食物提交时,Hiberante会对Session中持久状态的对象进行加测,判断对象的数据是否发生了变化 为什么要进行脏检查?, 解析:如果对象发生了改变,就需要将改 ...

  7. 三种方法查看MySQL数据库的版本

    1.使用-V参数 首先我们想到的肯定就是查看版本号的参数命令,参数为-V(大写字母)或者--version 使用方法: D:\xampp\mysql\bin>mysql -V 或者 D:\xam ...

  8. ubuntu系统下,gsl 库链接问题 -undefined reference to `cblas_xxx`

    今天在ubuntu系统下进行程序调试的时候出现以下错误信息: [ %] Linking CXX executable ../test_coco /usr/local/lib/libgsl.so: un ...

  9. MVC FormCollection collection

    1.通过name获取值 collection.GetValues() 返回一个数组,适用于多选等,如果是单值可以[0] 2.直接转化为实体 将Action动作中传递的FormCollection转变成 ...

  10. 关于安卓工程导出带res资源文件的jar的总结

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 29.0px; font: 16.0px "Microsoft YaHei" ...