Filter实现session超时自动跳转到login页,超过试用期不许登录
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页,超过试用期不许登录的更多相关文章
- session过期后自动跳转到登陆页
项目需要做一个自动登出的功能,查询了网上的资料,一开始准备用session监听做,按照下面方式配置监听器 1.在项目的web.xml文件中添加如下代码: <!--添加Session监听器--&g ...
- Shiro中session超时页面跳转的处理
问题描述 shiro在管理session后,在session超时会进行跳转,这里有两种情况需要考虑,一种是ajax方式的请求超时,一种页面跳转请求的超时. 本文从这两个方面分别考虑并处理. ajax请 ...
- Swift - 判断是否有某功能访问权限,没有则提示,并自动跳转到设置页
由于 iOS 系统的安全限制,App 如果需要访问设备的通讯录.麦克风. 相册. 相机.地理位置等时,需要请求用户是否允许访问. 有时用户不小心点了“不允许”,后面可能就不知道要去哪里再开启这个权 ...
- 爱上MVC~ajax调用分部视图session超时页面跳转问题
回到目录 这个问题出现了很多年了,都没有解决,问题是这样的,有一个需要授权才可以访问的分部视图,在一个view中使用ajax的方法去调用它,然后更新页面的局部DIV,这时,如果你长时间不操作,sess ...
- 当session过期后自动跳转到登陆页而且会跳出iframe框架
写项目时在重定向后一直存在一个问题就是重定向后登陆页面会出现在跳出的子框架里.
- 利用.Net自带的票据完成BaseController的未登陆自动跳转到登陆页功能
一:定义票据中要记录的字段类 /// <summary> /// 用户存在于浏览器端的身份票据(非持久) /// 非持久 FormsAuthenticationTicket 的isPers ...
- mvc ajax访问后台时session过期无法跳转到Login页面问题解决
public class BaseController : Controller { protected User UserInfo { set { Session["UserInfo&qu ...
- struts2拦截器实现session超时返回登录页面(iframe下跳转到其父页面)
需求:session超时时,返回登录页面,由于页面嵌套在iframe下,因此要跳转到登录页面的父页面,但是首页,登录页面等不需要进行跳转 实现: java文件:SessionIterceptor.ja ...
- ajax提交session超时跳转页面使用全局的方法来处理
来自:http://www.jb51.net/article/43770.htm 如果是ajax提交,超时时从服务器发出的跳转命令就不会起作用,所以如果是session超时,而且是在ajax请求,就在 ...
随机推荐
- c# 读取confgi文件
引用命名空间using System.Configuration; Winform—C#读写config配置文件
- HDU_5517_Triple
Triple Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path(Myeclipse添加Server Library)
网上找练习的项目导入到myeclipse项目发现每个JSP 出现错误The superclass "javax.servlet.http.HttpServlet" was not ...
- postman app支持浏览器上的cookie
1. 安装postman app 注意要安装postman application(一个应用软件),而不是chrome 插件,打开下面的这个开关 2. chrom浏览器 给chrom浏览器安装pos ...
- SQL基础--查询之一--单表查询
SQL基础--查询之一--单表查询
- sql server 驱动程序在 \Device\RaidPort0 上检测到控制器错误。
sql server 驱动程序在 \Device\RaidPort0 上检测到控制器错误. 错误情况,如下图: 原因分析:硬盘故障 解决办法:进行迁移
- [C#]嵌入互操作类型
嵌入互操作类型(Embed Interop Types) 运用office编程调用Excel 的PIA时Microsoft.Office.Interop.Excel.dll时会产生如下问题: 1.提示 ...
- Django Rest Framework(3)-----APIView与Viewsets
REST framework提供了一个APIView类,它是Django的View类的子类. REST framework主要的几种view以及他们之间的关系: mixins 到目前为止,我们使用的创 ...
- 梅尔频率倒谱系数(MFCC) 学习笔记
最近学习音乐自动标注的过程中,看到了有关使用MFCC提取音频特征的内容,特地在网上找到资料,学习了一下相关内容.此笔记大部分内容摘自博文 http://blog.csdn.net/zouxy09/ar ...
- LabView和DLL中的参数问题
注意:在LabView中调用DLL函数时,一定要指定对应的参数类型,而不是选择“Adapt to Type”,否则会出错,不知道为什么书上是要选择“Adapt to Type”. 以下做个参考: 转自 ...