OWASP(CsrfGuard)源码解析03----CsrfGuardHttpSessionListener分析

一、介绍

上一章已经介绍了 CsrfGuardServletContextListener , 本章继续分析另外一个 Listener-CsrfGuardHttpSessionListener

二、CsrfGuardHttpSessionListener分析

CsrfGuardHttpSessionListener 是继承了 HttpSessionListener ,主要是在 Session 创建和销毁时进行 监听处理,代码如下,
这个监听器 需要 在 Web.xml 的位置 ,需要在 CsrfGuardServletContextListener 之后,不然获取不到 config 里面的配置

public class CsrfGuardHttpSessionListener implements HttpSessionListener {

    /**
    创建session 时,对 session 进行Token 的更新
    **/
	@Override
	public void sessionCreated(HttpSessionEvent event) {
		HttpSession session = event.getSession();
		CsrfGuard csrfGuard = CsrfGuard.getInstance();
		csrfGuard.updateToken(session);
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent event) {
	/** nothing to do **/
	}

}

2.1 csrfGuard 类方法 updateToken分析

从session 中获取 org.owasp.csrfguard.SessionKey 对应的sessionKey
如果没有就创建,并放入session

这里使用的是 默认 SHA1PRNG , 长度是 32位,每隔4位,用 “-” 分隔

	public void updateToken(HttpSession session) {
	   //从session 中获取 org.owasp.csrfguard.SessionKey 对应的sessionKey 
		String tokenValue = (String) session.getAttribute(getSessionKey());

		/**如果为null, 那就创建一个新的,并放入session**/
		if (tokenValue == null) {
			try {
				tokenValue = RandomGenerator.generateRandomId(getPrng(), getTokenLength());
			} catch (Exception e) {
				throw new RuntimeException(String.format("unable to generate the random token - %s", e.getLocalizedMessage()), e);
			}

			session.setAttribute(getSessionKey(), tokenValue);
		}
	}

三、小结

CsrfGuardHttpSessionListener 这个比较简单了,就是 每次创建session时, 创建Token 并放入到 session 中, 值得注意的是 这个 Listener 需要在 CsrfGuardServletContextListener 后面 ,不然 获取不到config .

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直打铁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值