jfinal Interceptor里获取Session里的全局变量怎么是空的?

我创建了一个AuthInterceptor用于登录认证的拦截器,但是在里面通过,

invocation.getSessionAtrr()获取Sesssion里的User对象为什么是空的

public class AuthInterceptor implements Interceptor {

    public void intercept(Invocation invocation) {

        Controller controller = invocation.getController();
        User user = controller.getSessionAttr(User.LOGIN_SESSION_NAME);
        //这里的user是null,为什么
        System.out.println("user:" + JSON.toJSONString(user,true));
        if (null == user) {
            controller.redirect("/login");
        } else {
            invocation.invoke();
        }
    }
}

public class LoginController extends Controller {

    private ILoginService loginService = new LoginServiceImpl();

    @Clear(AuthInterceptor.class)
    public void index() {
        renderJsp("login.jsp");
    }

    @Clear(AuthInterceptor.class)
    public void validate() {
        String account = getPara("account");
        String password = getPara("password");
        try {
            User user = loginService.login(account,password);
            if (null != user) {
                this.setSessionAttr(User.LOGIN_SESSION_NAME,user);
                redirect("/index");
            } else {
                redirect("/login");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


评论区

fangdengfu

2017-11-21 11:28

我今天也遇见这个问题了。。纠结,还在不停的debug。。。

fangdengfu

2017-11-21 14:27

我今天尝试了一下,可能是session超时,也有可能是其它的,总之我换了个写法,然后去登录触发set操作,就出来了
//获取userId
Controller controller = inv.getController();
HttpSession session = controller.getRequest().getSession(false);
if (session != null) {
User user = (User) session.getAttribute("user");

}else {
throw new LoginException();
}

6165zyx

2018-12-18 13:12

@fangdengfu 老兄,我今天也遇到这个问题了,我用你方法还是不行,依然为空

热门反馈

扫码入社