在任何一个项目中,我们必须要用到的就是用户登录,那么就少不了用户是否登录的判断,如果我们每一个请求都要去做一次判断,那么就会变得很麻烦,但我们复制粘贴的时候我们就要考虑我们的代码写的是不是有问题,是不是可以重构一下,这里借鉴一下项目中的这种模式:

package interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import logical.login.LoginUser; import org.apache.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class SessionCheckInterceptor extends HandlerInterceptorAdapter {
private static Logger log = Logger.getLogger(SessionCheckInterceptor.class.toString()); public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex) throws Exception {
} @Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception { } @Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//判斷此使用者是否可進此連結
request.setCharacterEncoding("UTF-8");
String url = request.getServletPath();
log.info("post URL:"+url); /*{
List<HttpSession> sessionList = HttpSessionListenerTest.getAllSession();
log.info("\n\n\n\n Session資料開始============================");
for( int i=0; i < sessionList.size(); i++){
Object ob = sessionList.get(i).getAttribute("loginUser");
if( ob == null ){
continue;
}
LoginUser result = (LoginUser)ob;
System.out.println( result.getAccountName());
}
log.info("Session資料結束============================");
}
*/
/*String headername = "";
for(Enumeration e = request.getHeaderNames(); e.hasMoreElements();){
headername = (String)e.nextElement();
String value = request.getHeader(headername);
log.info(headername+":"+value);
}*/
if(this.isPassUrl(url)){
//判斷是否已登录
LoginUser loginUser = CssUtil.getLoginUser(request);
if(loginUser == null){
//無session則是未登录狀態
log.info(">>>未登录,請重新登录<<<");
response.sendRedirect("../login.jsp");
return false;
}
}
return true;
}
private boolean isPassUrl(String url){
if(!url.endsWith("/login/login")
&& !url.endsWith("/login/chnagePassEntry")
&& !url.endsWith("/login/change_Login")
&& !url.endsWith("/API/Service")
&& !url.endsWith("/API/Service2")
&& !url.endsWith("/province.txt")
&& !url.endsWith("/city.txt")
&& !url.endsWith("/area.txt")
&& !url.endsWith(".xml")
&& !url.endsWith(".js")
&& !url.endsWith(".css") && !url.endsWith(".png")
&& !url.endsWith(".CSS") && !url.endsWith(".CSS")
&& !url.endsWith(".jpg") && !url.endsWith(".gif")
&& !url.endsWith(".JPG") && !url.endsWith(".GIF")){
return true;
} return false;
}
}

spring MVC使用Interceptor做用户登录判断的更多相关文章

  1. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

  2. 针对Spring MVC的Interceptor内存马

    针对Spring MVC的Interceptor内存马 目录 针对Spring MVC的Interceptor内存马 1 基础拦截器和调用流程的探索 1.1 基础拦截器 1.2 探索拦截器的调用链 1 ...

  3. .net MVC使用Session验证用户登录(转载)

    .net MVC使用Session验证用户登录   用最简单的Session方式记录用户登录状态 1.添加DefaultController控制器,重写OnActionExecuting方法,每次访问 ...

  4. 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(下)

    昨天介绍了mybatis与spring的整合,今天我们完成剩下的springmvc的整合工作. 要整合springmvc首先得在web.xml中配置springmvc的前端控制器DispatcherS ...

  5. Spring MVC之LocaleResolver(解析用户区域)

    为了让web应用程序支持国际化,必须识别每个用户的首选区域,并根据这个区域显示内容. 在Spring MVC应用程序中,用户的区域是通过区域解析器来识别的,它必须实现LocaleResolver接口. ...

  6. net mvc中实现记录用户登录信息(记住登录效果)

    现记录用户登录信息(记住登录效果) 本文讲述了使用cookies实现网站记住登录效果,效果如下: 主要实现方法,当用户选择记住登录时建立cookies保存用户名和用户密码,当用户登录不选择记住登录时, ...

  7. C#语言Winform防SQl注入做用户登录的例子

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  8. 【4】 .net MVC使用Session验证用户登录

    用最简单的Session方式记录用户登录状态 1.添加DefaultController控制器,重写OnActionExecuting方法,每次访问控制器前触发 public class Defaul ...

  9. 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(上)

    由于本人愚钝,整合ssm框架真是费劲了全身的力气,所以打算写下这篇文章,一来是对整个过程进行一个回顾,二来是方便有像我一样的笨鸟看过这篇文章后对其有所帮助,如果本文中有不对的地方,也请大神们指教. 一 ...

随机推荐

  1. JavaScript正则表达式-定义

    通过RegExp()构造函数创建RegExp对象来定义正则表达式. var reg_pattern = new RegExt("a\d"); 通过字面语法直接定义正则表达式. va ...

  2. 并查集--poj 2492

    Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes ...

  3. Python paramiko模块 + 堡垒机

    paremiko SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko    # 创建SSH对象 ssh = paramiko.SSHClient ...

  4. Java-获取一个类的父类

    如何使用代码获取一个类的父类 package com.tj; public class MyClass implements Cloneable { public static void main(S ...

  5. angularJS $scope的$apply方法实现model刷新

    控制器内,$scope有个$apply方法,可以代码更改model并同步更新页面.通常,控制器内的方法执行完毕后仅会自动刷新一次页面展示,使用$apply方法即可在想刷新页面时就刷新.如本例,这个方法 ...

  6. Eclipse安装以及安装时遇到的问题解决办法

    1, 首先要安装JDK(最好使用最新版本),注意区分32位于64位 2, 安装程序,双击打开安装即可 3, 安装包下载:http://developer.android.com/sdk/index.h ...

  7. docker.io/centos安装phpstudy

    1.准备工作 yum install vimyum install wget yum install make yum -y install bzip2 yum install m4 yum inst ...

  8. POJ 2359 Questions

    Questions Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1228   Accepted: 449 Descript ...

  9. redis介绍和安装(一)

    Redis介绍:redis是一个key-value存储系统. 和Memcached类似,它支持存储的value类型相对更多,包括 string(字符串). list(链表).set(集合).zset( ...

  10. iOS 3D UI(3D翻转)

    demo链接:http://pan.baidu.com/s/1eQVPj0m 先写个demo