Filter

session超时&超过试用期禁用

新建一个过滤器

过滤器拦截所有请求,所以要在xml中配置拦截器作用某些url。

Filter拦截所有请求,interceptor只拦截action请求

package com.autumn.filter;

import com.autumn.pojo.Users;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date; /**
* 是否登录判断
*/
public class CheckLoginFilter implements Filter { private String USER =""; private String ROOTPATH; @Override
public void init(FilterConfig filterConfig) throws ServletException {
this.USER = filterConfig.getInitParameter("user").trim();
this.ROOTPATH = filterConfig.getInitParameter("rootPath");
} @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
Object userid = null;
HttpServletResponse res=(HttpServletResponse)response;
HttpServletRequest req=(HttpServletRequest)request;
Users users = (Users)req.getSession().getAttribute(USER);
if (users!=null){
userid =users.getId();
} System.out.println("req.getRequestURI():"+req.getRequestURI()); if(isShakedown(3018,3,16))
{
System.out.println("系统试用期已到,请联系商务!");
res.sendRedirect(ROOTPATH+"?rtnCode=200");
}else if(req.getRequestURI().contains("/loginController/login")){ //当是登录请求时,继续往下执行
filterChain.doFilter(req, res);
}else if(userid==null||userid.toString().trim().isEmpty()) //当没有session时,即未登录,跳到登录页
{
//System.out.println("CheckLoginFilter userid:"+userid);
System.out.println("CheckLoginFilter userId is null");
res.sendRedirect(ROOTPATH);
}else{ //继续往下执行
//System.out.println("CheckLoginFilter chain.doFilter");
filterChain.doFilter(req, res);
}
} @Override
public void destroy() {
if(this.USER !=null&&this.USER.trim().isEmpty())
{
this.USER ="";
} if(this.ROOTPATH!=null&&this.ROOTPATH.trim().isEmpty())
{
this.ROOTPATH="";
}
} //试用期判断
public static boolean isShakedown(int year,int month,int day)
{
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();// 获取一个Claender实例
cal.set(year, month-1, day);
Date endDate;
try {
endDate = sf.parse(sf.format(cal.getTime()));
if (date.getTime() > endDate.getTime()) {
return true;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return true;
}
return false;
}
}

web.xml中加入过滤器配置

<filter>
<filter-name>loginFilter</filter-name>
<filter-class>
com.autumn.filter.CheckLoginFilter
</filter-class>
<init-param>
<param-name>excludedPages</param-name>
<param-value>/login.jsp</param-value><!-- 登陆页不做拦截的请求声明,filter中登录的接口也被排除-->
</init-param>
<init-param>
<param-name>user</param-name> <!--配置的session参数-->
<param-value>user</param-value>
</init-param>
<init-param>
<param-name>rootPath</param-name> <!-- 配置的登录页 -->
<param-value>/Bookkeeping/login.jsp</param-value>
</init-param>
</filter>
<filter-mapping> <!--拦截映射一 -->
<filter-name>loginFilter</filter-name>
<url-pattern>/manager/*</url-pattern> <!--拦截后台的请求接口-->
</filter-mapping>
<filter-mapping><!--拦截映射二 -->
<filter-name>loginFilter</filter-name>
<url-pattern>/jsp/*</url-pattern> <!--拦截直接访问前端页面-->
</filter-mapping>

Interceptor

java代码

package com.gmtx.system.intercepts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.gmtx.platform.model.Userinfo;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; public class MyInterceptor implements HandlerInterceptor { @Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object arg2) throws Exception {
String uri = request.getRequestURI();
HttpSession session = request.getSession();
Userinfo sessionUserinfo = (Userinfo)session.getAttribute("CURR_USER"); /*不拦截静态资源spring mvc4.3以上可以用<mvc:exclude-mapping path=""/>代替*/
if (uri.endsWith(".js")||uri.endsWith(".css")||uri.endsWith(".css")||uri.indexOf(".")>0){
//System.out.println("不拦截资源文件"+uri);
return true;
} //System.out.println("拦截访问"+uri); //如果是登录页,不拦截
if (uri.indexOf("login")>0){
return true;
} //如果已经登录,不拦截
if(sessionUserinfo!=null){
return true;
}else { //如果未登录,跳转到登陆页
response.sendRedirect(request.getContextPath()+"/login.jsp");
return false;
}
} @Override
public void afterCompletion(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
} @Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView arg3) throws Exception {
}
}

spring-web.xml

     <mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*/**"/> <!-- /*只拦截根目录,/*/**拦截project/url -->
<!--spring-mvc-4.3才能用以下标签
<mvc:exclude-mapping path="/**/fonts/*"/>
<mvc:exclude-mapping path="/**/*.css"/>
<mvc:exclude-mapping path="/**/*.js"/>
<mvc:exclude-mapping path="/**/*.png"/>
<mvc:exclude-mapping path="/**/*.gif"/>
<mvc:exclude-mapping path="/**/*.jpg"/>
<mvc:exclude-mapping path="/**/*.jpeg"/>
<mvc:exclude-mapping path="/**/*login*"/>
<mvc:exclude-mapping path="/**/*Login*"/>-->
<bean class="com.gmtx.system.intercepts.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>

Filter实现session超时自动跳转到login页,超过试用期不许登录的更多相关文章

  1. session过期后自动跳转到登陆页

    项目需要做一个自动登出的功能,查询了网上的资料,一开始准备用session监听做,按照下面方式配置监听器 1.在项目的web.xml文件中添加如下代码: <!--添加Session监听器--&g ...

  2. Shiro中session超时页面跳转的处理

    问题描述 shiro在管理session后,在session超时会进行跳转,这里有两种情况需要考虑,一种是ajax方式的请求超时,一种页面跳转请求的超时. 本文从这两个方面分别考虑并处理. ajax请 ...

  3. Swift - 判断是否有某功能访问权限,没有则提示,并自动跳转到设置页

    由于 iOS 系统的安全限制,App 如果需要访问设备的通讯录.麦克风. 相册. 相机.地理位置等时,需要请求用户是否允许访问.   有时用户不小心点了“不允许”,后面可能就不知道要去哪里再开启这个权 ...

  4. 爱上MVC~ajax调用分部视图session超时页面跳转问题

    回到目录 这个问题出现了很多年了,都没有解决,问题是这样的,有一个需要授权才可以访问的分部视图,在一个view中使用ajax的方法去调用它,然后更新页面的局部DIV,这时,如果你长时间不操作,sess ...

  5. 当session过期后自动跳转到登陆页而且会跳出iframe框架

    写项目时在重定向后一直存在一个问题就是重定向后登陆页面会出现在跳出的子框架里.

  6. 利用.Net自带的票据完成BaseController的未登陆自动跳转到登陆页功能

    一:定义票据中要记录的字段类 /// <summary> /// 用户存在于浏览器端的身份票据(非持久) /// 非持久 FormsAuthenticationTicket 的isPers ...

  7. mvc ajax访问后台时session过期无法跳转到Login页面问题解决

    public class BaseController : Controller { protected User UserInfo { set { Session["UserInfo&qu ...

  8. struts2拦截器实现session超时返回登录页面(iframe下跳转到其父页面)

    需求:session超时时,返回登录页面,由于页面嵌套在iframe下,因此要跳转到登录页面的父页面,但是首页,登录页面等不需要进行跳转 实现: java文件:SessionIterceptor.ja ...

  9. ajax提交session超时跳转页面使用全局的方法来处理

    来自:http://www.jb51.net/article/43770.htm 如果是ajax提交,超时时从服务器发出的跳转命令就不会起作用,所以如果是session超时,而且是在ajax请求,就在 ...

随机推荐

  1. python问答模块

    """ 该模块功能:获取用户的输入文本,通过输入文本和数据库中的关键主题文本相比较, 获取最佳的回答内容 """ import xlrd i ...

  2. 为linux扩展swap分区

    1.查看当前swap分区使用情况 [root@localhost ~]# swapon -s Filename Type Size Used Priority /dev/sda2            ...

  3. Python爬虫框架Scrapy实例(二)

    目标任务:使用Scrapy框架爬取新浪网导航页所有大类.小类.小类里的子链接.以及子链接页面的新闻内容,最后保存到本地. 大类小类如下图所示: 点击国内这个小类,进入页面后效果如下图(部分截图): 查 ...

  4. 系统中同时有 python2和 python3,怎么让 ipython 选择不同的版本启动?

    已经安装的情况下: > which ipython /usr/local/bin/ipython > cat /usr/local/bin/ipython  #!/usr/local/op ...

  5. Python开发【笔记】:sort排序大法

    浅谈排序 程序中经常用到排序函数,Python 提供了 sort 和 sorted 函数,一个原地排序,一个返回排序后的新结果 1.参数 函数原型: sort([cmp[, key[, reverse ...

  6. APM最佳实践: 诊断平安城市视频网性能问题

    前言: 平安城市已经是一个关系你我他的民生工程,但由于本身系统的复杂性,给运维工作带来了极大的挑战.如何保障摄像头在线率?如何在系统中找到视频系统故障的问题所在?在我们某一次项目经历中,APM在发现问 ...

  7. java-基础-【二】内部类与静态内部类

    一.说明 java允许我们在一个类里面定义静态类.比如内部类(nested class).把nested class封闭起来的类叫外部类.在java中,我们不能用static修饰顶级类(top lev ...

  8. C++模拟Http/Https访问web站点

    一.概述 1.Http与Https的区别与联系 在OSI参考模型中Http与Https均属于应用层协议.Http即Hypertext Transfer Protocol,超文本传输协议:而Https为 ...

  9. Python 之各种推导式玩法

    推导式套路 之前我们已经学习了最简单的列表推导式和生成器表达式.但是除此之外,其实还有字典推导式.集合推导式等等. 下面是一个以列表推导式为例的推导式详细格式,同样适用于其他推导式. variable ...

  10. Missing Number-[回溯][难]

    2. Missing number 转自:https://mp.weixin.qq.com/s/WLRXLdi-3igkjtiWlHg7Ug Given a positive integer n(n≤ ...