2

Spring3MVCでHttpSessionを使用したい。私はすべてのWebを検索し、このソリューションをhttp://forum.springsource.org/showthread.php?98850-Adding-to-stuff-to-the-session-while-using-ResponseBodyで入手しました。

基本的に、私のアプリケーションはwinIdを取得してユーザーを自動認証し、LDAP(イントラネットサイト)を介して承認します。

アプリケーションのフローは次のとおりです。

  1. ユーザーがアプリケーションのURLを入力http://localhost:8082/eIA_Mock_5します()ウェルカムページ(index.jsp)があります
  2. index.jspはjQueryを介してwinIdを取得し、login.html(AJAXを介して)をヒットしてwindowsIdを渡します
  3. login.html(コントローラー)はLDAPを介して認証し、応答として「有効な」文字列を返します
  4. JavaScriptは、正しい応答を取得すると、ウェルカムページをリダイレクト/ロードします。localhost:8082/eIA_Mock_5/welcome.html

これで、フィルターが関連付けられました。これは、各着信要求に対してセッションが有効かどうかをチェックします。ここで問題となるのは、データをHttpSessionに設定したにもかかわらず、フィルターまたはその他のコントローラーがセッションを介してデータを取得できず、その結果、データがそれ以上進まないことです。

これがコードです。実際に何が悪いのか提案してもらえますか?

Home_Controller.java

@Controller
public class Home_Controller {

    public static Log logger = LogFactory.getLog(Home_Controller.class);

    @RequestMapping(value = {"/welcome"})
    public ModelAndView loadWelcomePage(HttpServletRequest request, HttpServletResponse response)
    {
        ModelAndView mdv = new ModelAndView();
        try {
            /*HttpSession session = request.getSession();
            UserMasterBean userBean = (UserMasterBean)session.getAttribute("userBean");
            String userName = userBean.getWindowsId();
            if(userName == null || userName.equalsIgnoreCase(""))
            {   
                mdv.setViewName("homePage");

                System.out.println("Unable to authenticate user ");
                logger.debug("Unable to authenticate user ");
            }
            else
            {
                System.out.println("Welcome User "+userName);
                logger.debug("Welcome User "+userName);
                */
                mdv.setViewName("homePage");
            /*}*/

        }
        catch (Exception e){
            logger.debug("inside authenticateUser ",e);
            e.printStackTrace();
        }
        return mdv;
    }

    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public @ResponseBody String authenticateUser(@RequestParam String userName, HttpSession session)
    {
        logger.debug("inside authenticateUser");

        String returnResponse = new String();
        try {
            logger.debug("userName for Authentication " + userName);
            System.out.println("userName for Authentication " + userName);

            //HttpSession session  =  request.getSession();

            if (userName == null || userName.trim().equalsIgnoreCase(""))
                returnResponse = "Invalid";
            else
            {
                System.out.println("uname " + userName);

                String ldapResponse = LDAPConnectUtil.isValidActiveDirectoryUser(userName, "");

                if (ldapResponse.equalsIgnoreCase("true"))
                {   
                    returnResponse="Valid";

                    System.out.println(userName + " Authenticated");
                    logger.debug(userName + " Authenticated");

                    UserMasterBean userBean = new UserMasterBean();
                    userBean.setWindowsId(userName);

                    //if(session.getAttribute("userBean")==null)
                    session.setAttribute("userBean", userBean);
                }
                else
                {   
                    returnResponse = "Invalid";

                    //session.setAttribute("userBean", null);

                    System.out.println("Unable to Authenticate the user through Ldap");
                    logger.debug("Unable to Authenticate the user through Ldap");
                }

                System.out.println("ldapResponse " + ldapResponse);
                logger.debug("ldapResponse " + ldapResponse);

                System.out.println("returnResponse " + returnResponse);
            }

            UserMasterBean u = (UserMasterBean)session.getAttribute("userBean");
            System.out.println("winId " + u.getWindowsId());
        }
        catch(Exception e){
            e.printStackTrace();
            logger.debug("Exception in authenticateUser ", e);
        }
        return returnResponse;
    }
}


フィルター

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
{
    System.out.println("in PageFilter");
    boolean flag = false;
    HttpServletRequest objHttpServletRequest = (HttpServletRequest)request;
    HttpServletResponse objHttpServletResponse = (HttpServletResponse)response;
    HttpSession session = objHttpServletRequest.getSession();
    String contextPath = objHttpServletRequest.getContextPath();

    String servletPath = objHttpServletRequest.getSession().getServletContext().getRealPath(objHttpServletRequest.getServletPath());

    logger.debug("contextPath :" + contextPath);
    logger.debug("servletPath :" + servletPath);
    System.out.println("in PageFilter, contextPath :" + contextPath);
    System.out.println("in PageFilter, servletPath :" + servletPath);

    if (servletPath.endsWith("\\") || servletPath.endsWith("/") || 
        servletPath.indexOf("css") > 0 || servletPath.indexOf("jsp") > 0 || 
        servletPath.indexOf("images") > 0 || servletPath.indexOf("js") > 0 || 
        servletPath.endsWith("index.jsp") || servletPath.indexOf("xls") > 0 || 
        servletPath.indexOf("ini") > 0 || servletPath.indexOf("login.html") > 0 || 
        /*servletPath.endsWith("welcome.html") ||*/ servletPath.endsWith("logout.do") )
    {
        System.out.println("User is trying to access allowed pages like Login.jsp, errorPage.jsp, js, images, css");
        logger.debug("User is trying to access allowed pages like Login.jsp, errorPage.jsp, js, images, css");
        flag = true;
    }

    if (flag == false)
    {
        System.out.println("flag = false");

        if (session.getAttribute("userBean") == null)
            System.out.println("yes session.userbean is null");

        if ((session != null) && (session.getAttribute("userBean") != null))
        {
            System.out.println("session!=null && session.getAttribute(userId)!=null");

            logger.debug("IF Part");

            UserMasterBean userBean = (UserMasterBean)session.getAttribute("userBean");
            String windowsId = userBean.getWindowsId();

            logger.debug("User Id " + windowsId + " allowed access");
            System.out.println("User Id " + windowsId + " allowed access");
            flag = true;
        }
        else
        {
            System.out.println("else .....session!=null && session.getAttribute(userId)!=null");
            logger.debug("Else Part");
            flag = false;
        }
    }

    if (flag == true) {
        try {
            System.out.println("before chain.doFilter(request, response)");
            chain.doFilter(request, response);
        } catch (Exception e) {
            e.printStackTrace();
            try {
                objHttpServletResponse.sendRedirect(contextPath + "/logout.do");
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
    else
    {
        try {
            System.out.println("before sendRedirect");
            objHttpServletResponse.sendRedirect(contextPath + "/jsp/errorPage.jsp");
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

    System.out.println("end of PageFilter");
}


index.jsp

<script type="text/javascript">
    //alert("inside s13");
    var WinNetwork = new ActiveXObject("WScript.Network");
    var userName = WinNetwork.UserName;
    alert(userName);

    $.ajax({  
        url: "login.html",  
        data: "userName="+userName,
        success: function(result) {
            alert("result == " + result);
            if (result == "Valid")
                window.location = "http://10.160.118.200:8082/eIA_Mock_5/welcome.html";
        }
    });
</script>


*
Spring 3 MVCを使用しているため、 web.xmlにはURLパターンのフィルターエントリがあります。

4

1 に答える 1

2

その後のajax呼び出しとwindows.locationの設定に問題があると思います。

必ずCookieを有効にしてください。これを行わないと、ajaxリクエストは毎回新しいセッションにつながります。

window.location = urlそうして、このURLが現在のURLと異なる場合、Cookieはドメインに関連しており、ドメインをからに変更したため、新しいセッションも発生しlocalhostます10.160.118.200

リクエストごとにセッションIDを出力し、前のリクエストと比較します。セッションがいつ再作成されたかを見つけるのに役立ちます。

また、この答えは役に立ちます。

于 2012-10-11T14:36:38.420 に答える