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请求,就在 ...
随机推荐
- Oracle涂抹oracle学习笔记第8章RMAN说,我能备份
本次测试服务器为172.16.25.33 使用rman连接本地数据库 rman target / 在rman中执行启动与关闭的命令与sqlplus相同 在rman中执行sql语句 sql ‘需要执行的 ...
- flight framework 核心解读
http://blog.csdn.net/sky_zhe/article/details/38906689?utm_source=tuicool&utm_medium=referral
- Database Partitioning Options DATABASE SHARDING
w主写从读.集群节点间时时内存复制.单表横切纵切.分析报表系统通过服务器联表 http://www.agildata.com/database-sharding/ Database Partition ...
- MAC OSX
你可以输入下面的命令来查看IPv4端口:(最好加 sudo) # lsof -Pnl +M -i4
- 快递API接口
快递100
- java模拟网页http-url访问
package com.iflytek; import java.io.InputStream; import java.net.HttpURLConnection; import java.net. ...
- linux/Mac使用du查看目录占用的磁盘大小
[1]du命令用来查看目录或文件所占用磁盘空间的大小.常用选项组合为: du -sh [2]若要查看一个目录下每个文件和文件夹的磁盘占用空间,使用如下命令: du -ah --max-depth=1 ...
- (转)在GitHub多个帐号上添加SSH公钥
GitHub后台可以添加多个SSH Keys,但是同一个SSH Keys只能在添加在一个帐号上(添加时提示“Key is already in use”).理由很容易想到,SSH公钥使用时相当于用户名 ...
- Windows2003 + IIS6 安装.Net FrameWork 4.0 兼容早期版本的测试
看到文档说.net4的框架可以向下兼容2.0.3.0.3.5这几个版本,觉得是一件好事,以后服务器上就不用费时费力的安装 2.0.3.5之类的框架了.但是又觉得奇怪,2.0和3.5的框架都是很大的,为 ...
- 基于struts2框架-自定义身份证号验证器
自定义拦截器的步骤: 1.定义一个验证器的类: > 自定义的验证器都需要实现 Validator接口. > 可以选择继承 ValidatorSupport 或 FieldValidato ...