【问题标题】:getSession().getAttribute("....") -> nullgetSession().getAttribute("....") -> null
【发布时间】:2018-01-23 14:49:05
【问题描述】:

我创建了一个登录 servlet:

@WebServlet(
    name = "SignInServlet",
    description = "check email & pass",
    urlPatterns = {"/authorization_signin"}
    )
public class SignInServlet extends javax.servlet.http.HttpServlet {

public SignInServlet(){
}

protected void doPost(HttpServletRequest request,
                      HttpServletResponse response) throws javax.servlet.ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    UserDataSet user = new UserDataSet();
    SignInModel modelSignIn = new SignInModel();


    user.setEmail(request.getParameter("email"));
    user.setPassword(request.getParameter("password"));

    user = modelSignIn.doSignIn(user);

    if (request.getSession().getAttribute("loggedUser") == null) {
        if (user != null) {
            request.getSession().setAttribute("loggedUser", user);             request.getRequestDispatcher("authorization.jsp").forward(request, response);
            response.setStatus(HttpServletResponse.SC_OK);
        } else {
            request.setAttribute("errorMessage", "Email or password is incorrect");
            request.getRequestDispatcher("index.jsp").forward(request, response);
            response.setStatus(HttpServletResponse.SC_OK);
        }
    }

}

@Override
 protected void doGet(HttpServletRequest request,
                  HttpServletResponse response) throws ServletException, IOException{
    response.setContentType("text/html; charset=utf-8");
    response.setStatus(HttpServletResponse.SC_NOT_FOUND);
}
}

当用户登录时,servlet 将他重定向到“authorization.jsp”

<body>
<%

if (request.getSession().getAttribute("loggedUser") != null){
    UserDataSet user = (UserDataSet) request.getSession().getAttribute("loggedUser");

    System.out.println("In author :" + request.getSession().getAttribute("loggedUser"));
%>
<h1> Hello <%= user.getFirstName() %> <%= user.getLastName() %>!</h1>
<h2>AUTORIZED!</h2>
 <a href="/authorization_logout">Log Out</a>
 <%
 }
else {
%>
 <h1>GO HOME</h1>
 <%
}
 %>
 </body>

然后浏览器显示此页面和登录用户的数据

如果写入 URL“localhost:8080”并转到“index.jsp”,则 再次在“authorization.jsp”上

过滤器检查会话:

@WebFilter(filterName = "LoginFilter")
public class LoginFilter implements Filter {
public void destroy() {
}



public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    HttpServletRequest httpRequest = (HttpServletRequest) req;
    HttpServletResponse httpResponse = (HttpServletResponse) resp;

    System.out.println("Enter filter");

    System.out.println("Filter session: " + httpRequest.getSession(false).getAttribute("loggedUser"));



    UserDataSet user = (UserDataSet) httpRequest.getSession(false).getAttribute("loggedUser");

    if (user != null) {
        System.out.println("CHAIN");
        chain.doFilter(req, resp);
    } else {
        httpResponse.sendRedirect("/");
        System.out.println("Not signin");
    }
}

public void init(FilterConfig config) throws ServletException {

}

}

getSession().getAttribute("loggedUser") 返回null 为什么?

下一段文字: 如果我登录并 servlet 打开“authorization.jsp”,然后尝试在将检查会话的任何 *.jsp 上抛出 URL,结果将是 null

怎么了?

【问题讨论】:

  • 哪个文件返回null?
  • @atiqkhaled 过滤器和检查会话的 *.jsp

标签: java jsp session servlets


【解决方案1】:

我用过

  <%=  request.getParameter("loggedUser") %>

由于某种原因,当我使用 request.getSession().getAttribute("loggedUser") 时,我在 java 日志中看到了 [1],我还在相同的代码中观察到 request.getParameter 的工作原理,至少在传递值时查询字符串和“未经检查或不安全的操作”从日志中消失。 所以在我看来,这可以解决这个问题。

[1]

_index__jsp.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

【讨论】:

  • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案以添加解释并说明适用的限制和假设。 From Review
【解决方案2】:

我的朋友在stackoverflow的一些答案中帮助我找到了这个问题的答案

如果您使用 request.getSession().setAttribute 在会话中放入某些内容,则必须从会话中读取它,而不是从请求中读取。试试

Link to answer

【讨论】:

  • 是的,在jsp页面中你必须这样调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多