0
  1. クライアント デバイスはすべての Cookie を消去します (したがって、JSESSIONIDクライアントには Cookie は存在しません)。
  2. クライアントは Spring コントローラーにリクエストを送信します。
  3. Spring Interceptor がリクエストをインターセプトします。

preHandle()Spring インターセプターのメソッドの最初の行で、の値をログに記録し、ログにこの値が表示されます。これは、実際にはクライアントから が受信されたことをrequest.getRequestedSessionId()意味するはずです。JSESSIONIDただし、私の Fiddler ログJSESSIONIDは、要求で no が送信されたことを示しています。

さらに、request.getSession(false).getId()同じ を返しますJSESSIONID

では、セッションはどのように/いつ/なぜJSESSIONIDインターセプターに到達する前に作成されたのでしょうか? クライアントから Cookie が送信されrequest.getRequestedSessionId()なかった場合は、nullになると予想されます。JSESSIONID

そして、このように「オンザフライ」でセッションが作成されないようにするにはどうすればよいですか?

問題がある場合、要求されているリソースは次のように実装されます。

@Controller
public class LoginController {
   .
   .
   .
   @RequestMapping(value = { "/controller/index.do" })
   public final ModelAndView login(final HttpServletRequest request, final HttpServletResponse response) {
      .
      .
      .

編集 -この回答で述べたように、セッションがまだない場合、JSP ページへのすべての呼び出しが暗黙的に新しいセッションを作成することを理解しています。しかし、インターセプターに到達する前にこれが起こるでしょうか?

EDIT2 -インターセプターはのインスタンスですorg.springframework.web.servlet.handler.HandlerInterceptorAdapter

4

1 に答える 1

0

サーブレットフィルターを使用できるはずです。このようなもの(テストされていません):

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class MyFilter implements Filter {
  public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,
      ServletException {
    HttpServletRequest request = (HttpServletRequest) req;         
    HttpSession session = request.getSession(false);
    HttpServletResponse response = (HttpServletResponse) resp;
    if (session == null) {
      // no session has been established yet      
    }
    chain.doFilter(req, resp); 
  }

  public void destroy() {
    // TODO Auto-generated method stub

  }

  public void init(FilterConfig filterConfig) throws ServletException {
    // TODO Auto-generated method stub

  }
}

次に、あなたのweb.xml

<filter>
  <filter-name>SessionFilter</filter-name>
  <filter-class>mypackage.MyFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>SessionFilter</filter-name>
  <url-pattern>/*</url-pattern> <!-- or whatever specific URL mappings you need -->
</filter-mapping> 
于 2013-07-11T14:29:18.100 に答える