`
yjingzeming
  • 浏览: 44580 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

web.xml安全性认证优先过滤器执行导致的一个问题

阅读更多
采用非安全认证对失去session后的处理方式是,在过滤器中设置
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;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import cn.com.newglobe.ibatis.model.Userinfo;


public class AuthFilter implements Filter {
	private static Log log = LogFactory.getLog(AuthFilter.class);

	public void init(FilterConfig filterConfig) throws ServletException {
		if (log.isDebugEnabled()) {
			log.debug("初始化权限过滤器。");
		}
	}

	public void doFilter(ServletRequest servletRequest,
			ServletResponse servletResponse, FilterChain filterChain)
			throws IOException, ServletException {
		System.out.println("初始化登录");
		/**
		 * 1,doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括
		 * 表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过
		 * 滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
		 */
		HttpServletRequest request = (HttpServletRequest) servletRequest;
		/**
		 * 如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中
		 * 无法得到的方法,就要把此request对象构造成HttpServletRequest
		 */
		HttpServletResponse response = (HttpServletResponse) servletResponse;
		response.setHeader("Pragma","No-cache");  
		response.setHeader("Cache-Control","no-cache");  
		response.setHeader("Cache-Control", "no-store");  
		response.setDateHeader("Expires",0);
		String currentURL = request.getRequestURI(); // 取得根目录所对应的绝对路径:
		HttpSession session = request.getSession();

		// 如果jsp就验证(login.jsp除外)

		if ((!currentURL.contains("/logon.jsp"))
				&& (!currentURL.contains("/logon/"))
				&& (!currentURL.contains("/forword.action"))
				&& (!currentURL.contains("/images/"))
				&& (!currentURL.contains("/CSS/"))
				&& (!currentURL.contains("/service/ledService"))
				&& (!currentURL.contains("/codeMaker"))) {
			if (log.isDebugEnabled()) {
				log.debug("对jsp文件进行权限验证。" + "请求的URL:" + currentURL);
			}
			//验证Session是否过期
//			if(request.isRequestedSessionIdValid()){
//			//session过期,转向session过期提示页,最终跳转至登录页面
//				response.sendRedirect(request.getContextPath() + "/logon/logOut.action");
//			return ;
//			}
			// 判断当前页是否是重定向以后的登录页面页面,如果是就不做session的判断,防止出现死循环
			 Userinfo user=(Userinfo) session.getAttribute("user");
			if (user == null) {
				response.sendRedirect(request.getContextPath() + "/logon/logOut.action");
				return;
			}
			// else {
			// Userinfo user=(Userinfo) session.getAttribute("user");
			// request.getSession().setAttribute("user",user);
			//                
			// }

		}
		// 加入filter链继续向下执行
		filterChain.doFilter(request, response);
		/**
		 * 调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作 为它
		 * 的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另
		 * 一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
		 */
	}

	public void destroy() {
	}

}

然而采用了安全认证,导致第一步会进行安全认证,web.xml会让失去session或者本身就没有session的用户的界面跳转到登陆界面login.jsp,可是地址栏上的URL却岿然不动,如果不做处理的话将会直接执行你输入的那个url的action,本想着在提交表单的时候操作那个url,不过安全认证让你无从下手,因为
<form name="loginform" method="post" action="j_security_check">

<INPUT name="j_username" type="text">

<INPUT name="j_password" TYPE="password">

<input type="submit" value="登 录" >

</form>


这个安全认证的提交表单的方式让我止步,也许您还可以试试是否可以去看看
 javax.security.auth.Subject;
javax.security.auth.callback.Callback;
javax.security.auth.callback.CallbackHandler;
javax.security.auth.callback.NameCallback;
javax.security.auth.callback.PasswordCallback;
javax.security.auth.login.FailedLoginException;
javax.security.auth.login.LoginException;
javax.security.auth.spi.LoginModule;

这个几个类的源代码,不过那却是非常痛苦的事了,苦思冥想,经一哥们指点,这个问题变得如此的简单,没有session后,页面跳转到了login.jsp,但是url却还在你输入的url中,故此
var firstHref=window.location.href;
if(firstHref.indexOf('HbEip/login/login.jsp')==-1)
{
	window.location.href="<%=request.getContextPath()%>/login/login.jsp"
}

只需判断url是不是你登陆的login.jsp,不然的话就跳转了,得到这一解答后,汗了一大把,想到了要从过滤器修改,想过查看安全认证源码,肿么就没想到在jsp上直接跳转呢。学习了一把。
分享到:
评论

相关推荐

    用web.xml控制Web应用的行为

    code元素 20 8.2 exception-type元素 21 9 提供安全性 23 9.1 指定验证的方法 23 9.2 限制对Web资源的访问 25 9.3 分配角色名 26 10 控制会话超时 27 11 Web应用的文档化 27 12 关联文件与...

    Java™ Servlet 规范.

    1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 .............................................

    Servlet3.1规范(最终版) PDF

    1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 ...............................................

    4、Spring Security 安全权限管理手册

    配置Web.xml,应用安全过滤器 配置Spring,验证与授权部分 在web页面中获取用户身份 在web页面中应用安全标签库 实现方法级安全 6、配置web.xml 7、Spring配置文件中设置命名空间 8、通过数据库验证用户身份 9、完善...

    Maven权威指南 很精典的学习教程,比ANT更好用

    选择一个适当级别的可移植性 11.2. 通过Maven Profiles实现可移植性 11.2.1. 覆盖一个项目对象模型 11.3. 激活Profile 11.3.1. 激活配置 11.3.2. 通过属性缺失激活 11.4. 外部Profile 11.5. Settings ...

    .NET移动通信程序设计.rar

    8.12.1 设备过滤器.. 80 8.12.2 DeviceSpecific1 程序.. 85 8.12.3 Templated Form 程序.. 86 8.12.4 StyleSheet Template 程序...... 90 8.12.5 DeviceSpecific3 程序.. 91 8.13 ShowImage 程序 92 8.14 Ad_...

    PHP和MySQL Web开发第4版pdf以及源码

    16.1处理安全性问题的策略 16.1.1 以正确心态为开始 16.1.2 安全性和可用性之间的平衡 16.1.3 安全监视 16.1.4 基本方法 16.2 识别所面临的威胁 16.2.1 访问或修改敏感数据 16.2.2 数据丢失或破坏 16.2.3 拒绝服务 ...

    spring security 参考手册中文版

    设置一个自定义的AuthenticationEntryPoint 64 6.4方法安全 64 6.4.1 元素 65 使用protect-pointcut添加安全性切入点 66 6.5默认AccessDecisionManager 67 6.5.1自定义AccessDecisionManager 67 6.6验证管理器和命名...

    PHP和MySQL WEB开发(第4版)

    16.1处理安全性问题的策略 16.1.1 以正确心态为开始 16.1.2 安全性和可用性之间的平衡 16.1.3 安全监视 16.1.4 基本方法 16.2 识别所面临的威胁 16.2.1 访问或修改敏感数据 16.2.2 数据丢失或破坏 16.2.3 拒绝服务 ...

    urlrewritefilter-4.0.3.jar

    4.0.3.jar是有时候项目中的真实链接不想让访问者直接读取到,所以这里就是用了url重写技术.urlrewritefilter4.0 是个开源的框架,其实就是把真实的链接替换掉,替换成你想显示的链接,然后web.xml里面有个过滤器,对...

    预防XSS攻击和SQL注入XssFilter

    XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin...

    PHP和MySQL Web开发第4版

    16.1处理安全性问题的策略 16.1.1 以正确心态为开始 16.1.2 安全性和可用性之间的平衡 16.1.3 安全监视 16.1.4 基本方法 16.2 识别所面临的威胁 16.2.1 访问或修改敏感数据 16.2.2 数据丢失或破坏 16.2.3 拒绝服务 ...

Global site tag (gtag.js) - Google Analytics