2017-08-24 13 views
0


ここは新しいですが、このページを何度も読んでいます。私は複雑な問題を抱えています。私は英語が母国語ではないので、私が理解できないと、最初の場所で私を容赦します。
古いOracle Portal 10gサーバーにポートレットを作成します。ポートレットでは、javascript関数がajaxを使用してサーブレットにデータをポストします。 サーブレットを呼び出すときにユーザーを識別したい。ポートレットセッションから何かを渡すことはできますか?ポートレットのように、PortletRenderRequestがあります。ユーザー名とそのユーザーの権限を取得できます。
私の理論ポートレットの機能は短いです:フォームは、誰かがそれを記入し、サーブレットにjavascript ajaxでデータを送信すると、その送信者がデータをデータベースに挿入する権利を持っているかどうかを確認したい/彼の名前)。今では、ポートレットはユーザーデータを取得し、入力された隠し要素の値に書き出し、JavaScriptはそれを読み取り、ポストと共に送信しますが、それは簡単にハック可能で、ひどい解決策です。

サーブレットリクエストでユーザーデータを取得する方法はありますか?

は今、理論的には、次のようになります。
portlet.jsp:

<% 
    PortletRenderRequest pReq = (PortletRenderRequest)request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST); 
    String userNev = pReq.getUser().getName(); 
    session.setAttribute("username",userNev); 
    System.out.println("session ID in JSP: "+session.getId()); 
%> 
<button class="btn" type="button">Upload data</button> 
<script type="text/javascript"> 
    $(function() { 
     $(".btn").click(function(){ 
      /*.....*/ 
      $.post("/demo/servlet", poststring); 
     }); 
    }); 
</script> 

サーブレット:

public class servlet extends HttpServlet { 
    public void doPost(HttpServletRequest request, 
         HttpServletResponse response) throws ServletException, IOException { 
     HttpSession session = (request.getSession()); 
     System.out.println("Session ID in servlet: "+session.getId()); 
     /*....*/ 
    } 
} 



は現在、それはJDeveloperの10.1.3.5で実行しています。
すべてのページリフレッシュでは、コンソールの「JSPでのセッションID」は異なりますが、「サーブレットのセッションID」は変更されないため、正しいものでなければなりません。
これで、タスクは正しいHttpSessionにデータを入れることです.JSPページで何とかアクセスする必要があります。 HttpSession Session = request.getSession(); jspページのは間違ったセッションを返します(リフレッシュごとに変更されます)。

編集:
すべての質問には@​​Jonathanが回答しています。それはJSPページ上でHttpSessionを取得するような追加の質問につながりますか?
私は、そのセッション= HttpSession = jspページでProviderSessionを見つけましたが、サーブレットのHttpSessionと等しくはありません。
(プロバイダ登録ページのログイン頻度を「常に」に設定した場合、jspページのProviderSessionはページ更新時に変更されませんでした)
ProviderSessionとHttpSessionの違いはわかりません。 1つから別のものへ私がサーブレットからProviderSessionに到達できるのであれば、それは使用時点から同じでしょうか?

答えて

0

アプリケーションセッションは、サーブレットとポートレットの両方のコンテナに存在します。 は、レンダリング・フェーズからポートレット・コンテナ内のアクション・フェーズ(またはいずれかの下の フェーズ)までのデータ(粗製のInter-Portlet 通信)を共有する方法の1つです。 what is the difference between a portlet and a servlet?

だから、ときにユーザーがログインアプリケーションに、あなたは「loggedInUser」この例では、セッション変数を設定します。 次に、サーブレットで、データベース要求を行う前に、セッション変数が空であるかどうかをチェックします。このように:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     HttpSession session = (request.getSession()); 
     //check if there is a loggedInUser session variable 
     if(null == session.getAttribute("loggedInUser")){    
      request.setAttribute("pleaselogin", "Not Logged In. Login or register to do this.");    
      RequestDispatcher rd=request.getRequestDispatcher("Error.html"); 
       rd.forward(request,response);   
     }else{ 

    String username = (String) session.getAttribute("loggedInUser"); 


    //do database logic 

} 

} 
+0

うわー、おかげで、感謝@ジョナサン! セッションにデータを入れようとしました: HttpSession Session = request.getSession(); Session.setAttribute( "loggedInUser"、userNev); System.err.println( "ellenőrzés:" + Session.getAttribute( "loggedInUser")); //大丈夫です! サーブレットでは、その属性にnullが見つかりました。 trueをに設定し、プロバイダー登録ページのログイン頻度を「ユーザーセッションごとに1回」に設定します。 – KoRi

+0

私はセッションID(session.getId())がjspページとサーブレットで異なることを知っているので、異なるセッションもあります。しかし、なぜ私は知らないのですか? – KoRi

+0

@KoRiあなたの投稿を編集して問題のあるコードを追加してください。私があなたに手伝ってもらえるかどうかが分かります。私はあなたの質問を正確に理解していません。 –

関連する問題