JFinal Interceptor

devtll 发布于 2016/10/15 00:25
阅读 435
收藏 0

@JFinal 你好,想跟你请教个问题:有一个登录控制器,下面是登录成功后的处理代码,登录成功后在js里用

location.href = "${base}/competitorCenter";跳转到个人中心控制器,个人中心控制有拦截,现在的问题是我登录控制器的sessionId和我个人中心拦截器里获取到sessionId不一样导致获取到的用户id值始终为null,就不能跳转到个人中心页面

Integer sid = competitor.getInt("id"); 

getSession().setAttribute(Competitor.LOGIN_COMPETITOR_ID_SESSION_NAME, sid.toString());

System.out.println(getSession().getId()); // 5ba0350e-c9cb-439f-b193-1a53a3f3f448  

ajaxJsonSuccessMessage("登录成功"); 

下面是个人中心控制器

@Before(CompetitorInterceptor.class)
public class CompetitorCenterController extends Controller{
	public void index(){		
	    setAttr("base", getRequest().getContextPath());
	    render("/competitor/competitor_center.html");
	}
}

下面是拦截器,打印出来的sessionId和登录时的不一样, 请问下这是什么原因呢

public class CompetitorInterceptor implements Interceptor {
    @Override
    public void intercept(Invocation ai) {
       Controller c = ai.getController();
       System.out.println(c.getSession().getId()); //95beaa21-aafd-4eda-8fdc-189c1a0cc754  
       String loginCompetitorId = (String)c.getSession().getAttribute(Competitor.LOGIN_COMPETITOR_ID_SESSION_NAME);
    }

}








加载中
0
JFinal
JFinal

    应该是入坑了,通常 sessionId 乱串都是入了这个坑,按照这篇博文的方式部署,注意 context path 设置为 "" 

    此法可以跳出坑:https://my.oschina.net/jfinal/blog/353062

    补充一句,这个问题与 jfinal 完全无关,jfinal 对 session 的所有操作仅仅只是将操作转给了 HttpServletRequest.getSession() 获取的 HttpSession 对象,出错的可能性无限接近于 0

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部