JSP登录前后改变JSESSIONID

本文探讨了在JSP登录过程中JSESSIONID如何发生变化,并重点讲解了如何通过配置web.xml的filter来确保登录状态的正确跟踪。特别是强调了filter的顺序,需要置于Struts2插件过滤器之前。


配置web.xml的filter(需要配置在Struts2插件过滤器前)

 <filter>
 <filter-name>filter1</filter-name>
 <filter-class>filter.LoginFilter1</filter-class>
 </filter>
 <filter-mapping>
 <filter-name>filter1</filter-name>
 <url-pattern>/*</url-pattern>
 </filter-mapping>


增加Filter

package filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


public class LoginFilter1 implements Filter {//尝试改变JSESSIONID

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("LoginFilter1 destroy");
	}

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException {
		// TODO Auto-generated method stub
		HttpServletRequest httpRequest = (HttpServletRequest)arg0;  
		StringBuffer ul = httpRequest.getRequestURL();		
		
		if(ul.toString().contains("login!getintoindex.do")){
			HttpSession session = httpRequest.getSession(false);
			
			if ( session != null && !session.isNew() ) {//isNew() Returns true if the client does not yet know about the session or if the client chooses not to join the session.
				HttpSession sessionOld = session; 
				User user = (User)sessionOld.getAttribute("user");

				sessionOld.invalidate();
				
				session = httpRequest.getSession(true);
				session.setAttribute("user", user);

				System.out.println("LoginFilter1 doFilter,url: " + httpRequest.getRequestURL()+" , session id: " + httpRequest.getSession().getId());
			}			
		}
		
		if(ul.toString().contains("top!logout.do")){//
			HttpSession session = httpRequest.getSession(false);
			if ( session != null && !session.isNew() ) {
				HttpSession sessionOld = session; 
				sessionOld.invalidate();
				session = httpRequest.getSession(true);
				
				System.out.println("LoginFilter1 doFilter,logout. ");
			}
			
		}
		
			
		
		arg2.doFilter(arg0, arg1);
		
		
		
		
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("LoginFilter1 init");
	}

}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值