【问题标题】:how to invalidate session in spring mvc for implementing logout如何在spring mvc中使会话无效以实现注销
【发布时间】:2017-10-08 04:46:51
【问题描述】:

我已经使用

设置了会话属性
@SessionAttribute annotation.
@RequestMapping(value = "/login_action")
public ModelAndView login_action(@RequestParam("email") String email,@RequestParam("password") String password){
                Query q=session.createSQLQuery("SELECT User_ID,User_First_Name,User_Last_Name,Email,User_Type,Program,Level,Gender FROM Users  WHERE Email=:email AND Password=:password");
q.setParameter("email",email);
q.setParameter("password",password);
Object u = (Object) q.uniqueResult();
model=new ModelAndView("profile");
model.addObject("user",u);
return model;
}

现在我需要在注销时使此会话无效。 我试过了

    @RequestMapping(value = "/logout")
    public ModelAndView logout(HttpSession sess){
        sess.invalidate();
        model.addObject("view","home");
        return model;
    }

我可以通过一些例子来回答一下吗?

感谢您的帮助

【问题讨论】:

  • 您的注销代码的结果是什么?
  • 它不起作用,会话变量“user”仍在存储中

标签: java spring session model-view-controller annotations


【解决方案1】:

来自javadocs

注意:使用此注释指示的会话属性对应 到特定处理程序的模型属性,透明地存储 在会话会话中。这些属性将在 处理程序指示其会话会话的完成。所以, 将此功能用于此类会话属性 应该在会话过程中临时存储在会话中 特定处理程序的对话。

对于永久会话属性,例如一个用户认证对象, 改用传统的 session.setAttribute 方法。 或者,考虑使用属性管理功能 通用 WebRequest 接口。

在使用 SessionAttributes 时,您通常使用 SessionStatus setComplete

我认为您最好将 Spring Security 与身份验证提供程序一起使用,例如 UsernamePasswordAuthenticationToken。您的用户/委托人可以通过 SecurityContextHolder 访问并包含在 HttpSession 中。使用 spring security 时,您可以使用/配置 LogoutConfigurer 使会话无效并清除 SecurityContextHolder 上下文并将身份验证设置为 null。

旁注:我希望这仅适用于演示/poc,因为您似乎将密码存储为纯文本

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2017-06-14
    • 2012-01-24
    相关资源
    最近更新 更多