springMVC登录拦截器实现类、配置文件及处理ajax请求与普通请求的方法_回忆里待续丶的博客-程序员宅基地

拦截器类要继承HandlerInterceptorAdapter父类,可以选择实现preHandle()方法{进入拦截器前要做的事},或者afterCompletion()方法{进入拦截器后要做的事}

拦截器测试类:  

package com.yq.cn.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

public class MyInterceptor1 extends HandlerInterceptorAdapter{

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		//进入时做的事情
		System.out.println("进入时做的事情11111");
		//调用下一个拦截器,如果没有,调用controller类
		return super.preHandle(request, response, handler);
	}
	
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		//退出时做的事情
		System.out.println("退出时做的事情1111111111");
		super.afterCompletion(request, response, handler, ex);
	}
}

2、在springMVC.xml中配置拦截器

<mvc:interceptors>  
<mvc:interceptors>
      <mvc:interceptor>
     <mvc:mapping path="/user/*" />
          <mvc:mapping path="/index/*" />
         <!-- 
         <bean class="controller.testlongin.SecurityInterceptor" />
         <bean class="controller.testlongin.SecurityInterceptor2" />
         -->
          <bean class="controller.testlongin.SecurityInterceptor3" />
      </mvc:interceptor>
    </mvc:interceptors>

处理ajax请求和处理普通请求

public class SecurityInterceptor3 extends HandlerInterceptorAdapter {
   //处理前进行拦截
  @Override
  public boolean preHandle(HttpServletRequest request,
      HttpServletResponse response, Object handler) throws Exception {
    System.out.println("进入过滤器!");
    Object login = request.getSession().getAttribute("userName");
    if (null==login) {
       boolean isAjax = "XMLHttpRequest".equals(request.getHeader("X-Requested-With"));  
       System.out.println(isAjax+"------------"+request.getHeader("X-Requested-With"));
       // 如果是ajax请求
      if (isAjax) {
        String jsonObj = "{\"success\":false,\"cause\":\"NO_LOGIN\",\"msg\":\"页面已过期,请重新登录!\"}";
            String contentType = "application/json;charset=utf-8";
            response.setContentType(contentType);
            PrintWriter out = response.getWriter();
            out.print(jsonObj);
            out.flush();
            out.close();
      } else {
        //普通请求
        String url = request.getContextPath()+"/security/tologin";
        response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            StringBuilder builder = new StringBuilder();
            builder.append("<script type=\"text/javascript\" charset=\"UTF-8\">");
            builder.append("alert(\"页面过期,请重新登录\");");
            builder.append("window.top.location.href=\""+url +"\";");
            builder.append("</script>");
            out.print(builder.toString());
            out.close();
      }
      return false;
    }
    return super.preHandle(request, response, handler);
  }
}

jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div style="color:red">
		${msg }
	</div>
	<form action="${pageContext.request.contextPath }/security/login" method="get">
		用户名:<input type="text" name="userName" value=""><br/>
		密    码:<input type="password" name="password" value=""><br/>
		<input type="submit"  value="登录"><br/>
	</form>
</body>
</html>

测试:


 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42154996/article/details/94645914

智能推荐

如何从PostgreSQL源码分析哪些操作需要超级用户权限 - 阿里云rds superuser提供了哪些权限...-程序员宅基地

标签PostgreSQL , 超级用户 , superuser背景在数据库中哪些操作需要超级用户的权限才能执行?这个问题翻文档可能翻不全面,或者是已经比较难以完成的任务。但是从源码里面是比较好找出这个答案的。权限例如postgres=# select * from pg_authid; rolname | ro..._pgsql must be superuser to create replication users

ssm框架搭建连接mysql_从零开始搭建SSM框架(Spring + Spring MVC + Mybatis)-程序员宅基地

最近在回顾和总结一些技术,想到了把之前比较火的 SSM 框架重新搭建出来,作为一个小结,同时也希望本文章写出来能对大家有一些帮助和启发,因本人水平有限,难免可能会有一些不对之处,欢迎各位大神拍砖指教,共同进步。本文章示例使用 IntelliJ IDEA 来开发,JDK 使用 11 版本,其余各框架和技术基本上使用了文章撰写当时的最新版本。好的,下面直接进入正题。打开 IntelliJ IDEA,F..._ssm框架连接mysql数据库的具体步骤

啃完这份Java调优笔记,阿里三面我让面试官JVM快了近十倍,直接给我发offer!_调优 面试 阿里-程序员宅基地

Java程序性能优化是一个永远逃不开的话题,优化无处不在!一个偶然间,小编得到了一份Java程序性能优化的笔记,小编读完这份笔记后大为惊叹,实在是写的太好了,不忍独乐乐,于是把这份笔记免费分享出来,供大家参阅,共同学习,共同成长!这份笔记涵盖了:Java性能调优概述、设计优化、Java程序优化、并行程序开发及优化、JVM调优、Java性能调优工具!由于文章篇幅的限制,接下来小编只能为大家展示完整目录和部分内容,完整版的在评论区!(具体的调优方式全部都在笔记之中)Java性能调优概述性能概述看懂程_调优 面试 阿里

laravel框架RBAC增删改查-程序员宅基地

编写表字段node表Schema::create('nodes', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name',50)->comment('节点名称'); $table->string('route_name',100)->nullable()->default('')->comment('路由别名,权

并行编程基础之CPU架构理解 SMP/MPP/NUMA/SMT/CMP_mp和cmp的区别-程序员宅基地

SMP/MPP/NUMA都是cpu级别的架构,区别是在于访问内存,I/O和外部中断等资源方式的不同。SMP是对称访问和共享访问所有资源,MPP是独立访问各自资源,完全没有共享资源,如果是综合则是NUMA(部分本地内存/部分远端内存)。这就引起一致性等处理方式不同。_mp和cmp的区别

Java学习日志-程序员宅基地

Java 学习日志今天是Java学习的第一天,老师并没有讲关于Java本身的知识,而是告诉我们应该如何去学,如每天都要去记学习笔记,对当天所学归纳总结,而在以后的学习生涯中,我也会保持这样良好的学习习惯。Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键..._java学习日志

随便推点

由浅入深玩转华为WLAN—18 漫游系列(5)同一AC内AP之间三层漫游【三层上线+旁挂+直接转发组网方式】-程序员宅基地

简介同一AC的三层漫游:指的是在同一个AC下面的不同AP之间不同业务之间的漫游(跨越三层网络),比如图中AP-1的业务VLAN 是10(192.168.10.0/24),而AP-2的业务VLAN是20(192.168.20.0/24),无线客户端从AP-1漫游到AP-2后,虽然处于AP-2上面,但是业务VLAN保持不变,IP地址也保持不变,只是由原先的AP-1变成了AP-2来转发无线客户端的业务。之前已经把网络基本初始化了,整个网络除了WLAN业务没有跑起来以外,其他的都能够正常运行,这次主要介_三层漫游

unity 调用高德地图手机读取信息定位和周边(AndroidStudio3.1.2版本打包)。_uinty手机3.1版本-程序员宅基地

首先也是看到网上有很多这这方面的博客,但是安卓Studio高版本对接unity高版本的却很少,有的还说高版本报错,我也是花时间研究了一下,感觉报错是正常的,一般还是配置环境问题。至于高版本报错,就有点夸张了,但是有很多细节还是要注意的。下面就为大家分享下我的心得。我尽量写的详细点。Unity安卓Studio3.1.2版本交互调用高德地图信息准备材料:1.我的unity..._uinty手机3.1版本

自定义一个类似listView和recylceView的需要setAdapter的控件_listview相似的控件-程序员宅基地

自定义 类似listview和recycleView的使用setAdapter的复合控件,红色标记的为重要代码。_listview相似的控件

从软件测试转行做前端,转行软件测试或者前端开发有前途么?-程序员宅基地

软件测试岗是互联网新兴产业衍生岗位职位之一;软件测试在我们平时看来,就是给程序找bug,需要使用各种测试技术和工具来测试和发现软件中存在的缺陷,从而让开发者更好的优化产品,让用户更加安全顺畅的使用。软件测试岗1.制定测试计划通过测试计划来确定测试产品所需资源,确定测试策略、测试系统、测试任务,评估和确定测试工作量。测试数据和用例是对产品进行任务描述,通过测试需求分析、业务流程分析、测试用例设计、测...

python的多态与鸭子类型_python多态和鸭子特性-程序员宅基地

1.前言:首先介绍下面向对象(OOP)的三大特征:(1)面向对象程序设计有三大特征:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)(2)封装(Encapsulation):类包含了数据和方法,将数据和方法放在一个类中就构成了封装。(3)继承(Inheritance):Java是单继承的(这点和C++有区别),意味着一个类只能继承于一个类..._python多态和鸭子特性

保护好大脑的海马区,老了也不怕健忘_海马脑区 保护-程序员宅基地

我们那两斤半的大脑里,有着千亿个神经元,每个神经元又有着上千个跟其他神经元“握手”的突触。不过,“脑子不够用”依然是全民共有的抱怨。去年,Zip大叔靠着一首“我的钥匙在哪?我的手机在哪?(Where’s My Keys? Where’s My Phone?)” 在英国达人秀一炮而红。令人懊恼的健忘就这样催生了一首万人传唱的神曲。我们的记忆存储在活生生的神经元里,正因如此,记忆不是白纸黑字的_海马脑区 保护

推荐文章

热门文章

相关标签