【问题标题】:Session only works one time spring mvc,会话只工作一次spring mvc,
【发布时间】:2016-09-02 11:37:01
【问题描述】:
@Controller
public class LoginController {

     @RequestMapping(value = "showLogin", method = RequestMethod.GET)
     public ModelAndView showLogin(HttpServletRequest request, HttpSession session) {

     return new ModelAndView("login");
     }

    @RequestMapping(value = "login", method = RequestMethod.POST)
    public String login(HttpServletRequest request, HttpSession session) {

        String page = "login";
        String loginId = request.getParameter("loginId");
        String password = request.getParameter("password");
    //  HttpSession session = request.getSession();
        session.setAttribute("USERNAME", loginId);

        if(loginId.equals("admin") && password.equals("admin")){
            session.setAttribute("loginId", "admin");
            session.setAttribute("userName", "admin");
            session.setAttribute("userDetails", "System Administrator");
            session.setAttribute("USERNAME", "admin");

            page = "home";
            return page;
        }
@RequestMapping(value = "projdet", method = RequestMethod.GET)
    public String project(
            @ModelAttribute("projMaster") ProjectMaster projMaster,
            Model model, HttpServletRequest request, HttpSession session) {

        List<ProjectMaster> allProjectlist =getMasterDaoService().getAllProjList();
    model.addAttribute("Projlist", allProjectlist);

        String page = "project";
        return page;
    }

会话只工作一次spring mvc,一旦登录返回主页但从主页到下一个屏幕没有用户详细信息和会话在任何其他控制器中都找不到

【问题讨论】:

  • 不可能。 Httpsession 在整个应用程序中都可用。你可能在某个地方做了会话失效
  • 我知道这个 Httpsession 在整个应用程序中都可用。只使用一次... @RequestMapping("logout") public String logout(HttpServletRequest request) { try { HttpSession session = request.getSession(); session.invalidate(); } 捕捉(异常前){ ex.printStackTrace(); } 返回“索引”; }
  • 当你说没有找到会话时,你的意思是HttpSessionnull吗?
  • 是的会话为空...登录后在主页上可用..但是..在下一个屏幕/页面上它变为空

标签: java spring spring-mvc servlets


【解决方案1】:

我有几点建议:

  1. 这可能不是问题的根本原因,但您的第三个控制器函数的请求映射 URL 显示“projdet”。
  2. 尝试在 Eclipse 中调试并在此行停止:List<ProjectMaster> allProjectlist =getMasterDaoService().getAllProjList(); model.addAttribute("Projlist", allProjectlist);。彻底检查session 变量,看看它是否具有您在登录时设置的属性
  3. 在控制器中添加日志或 sysout 语句以显示您已设置的属性。
  4. 您使用的是 Spring 安全性吗?是否有任何函数使会话无效或调用logout

虽然这些可能无法指出确切的解决方案,但它可能会帮助您找出问题所在。从您在问题中提出的内容来看,没有证据表明代码中有任何错误。

【讨论】:

  • 谢谢……我会努力的……它基本上是一个高中级别的项目,没有使用任何安全措施……就像第三个控制器一样……调用任何其他控制器……从主页...我没有得到任何异常...但是会话值为空...在页面上...字符串 user=session.getattribute(userdetails).tostring 的 sysout 值 ....为空... V r 使用 bootstrap...和 ​​ajax...
  • 试试String user = (String) session.getAttribute("userDetails");
  • 是的,两种方法都试过了....String user=session.getattribute(userdetails).tostring........String user = (String) session.getAttribute("userDetails"); ......NULL......异常......
  • 如果登录的人是管理员,您只能设置名称为“userDetails”的属性。尝试查找名称为“USERNAME”的属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
相关资源
最近更新 更多