3

PHP では、ユーザーが自分のアカウントにログインすると、ユーザーがサイトをナビゲートするときにユーザーを記憶するために次のことを行います。

session_start();
...
$_SESSION['username'] = $username;

機密データを必要とする可能性のある他のページでは、それ$_SESSION['username']が有効であることを確認します。

ユーザーがログアウトすると、次のことを行います

unset($_SESSION['username']
session_destroy();

Javaで同じことを行うにはどうすればよいですか? と を使用する REST API がありJerseyますEJB。以下が重要な場合、私は JPA、Hibernate、Glassfish、および mysql を使用しています。

検証のために更新:

これは正しいです?

@Path("login")
public class UserLoginResource {

  @EJB
  private LoginDao  loginDao;

  @Context
  HttpServletRequest request;

  @POST
  public Response login(JAXBElement<Login> jaxbLogin){
    Login login = jaxbLogin.getValue();
    loginDao.authenticateUserLogin(login);
    HttpSession session = request.getSession();
    session.setAttribute("username", login.getUsername());
    return Response.ok().build();
  }
}
4

2 に答える 2

3

Java は php とは大きく異なります. Java ではHttpRequestgetSession()メソッドからのみセッションを取得します. ServletContainer (つまり、Apache Tomcat) から取得します。

php とは異なり、Java でセッションを開始する必要はありません。サーブレット コンテナー内にいてリクエストを送信している限り、このクライアントのサーブレット コンテナーは、セッションがない場合に開始する責任があります。

したがって、上記のアクションの場合:

    reqest.getSession().setAttribute("udername","Elbek");
    //later 
    reqest.getSession().removeAttribute("udername");

   //destroy it
   reqest.getSession().invalidate();

ここにHttpRequestクラスrequestのオブジェクトがあります

このHttpSessionをご覧ください

Javaスコープを確認することを強くお勧めします

PHPにはこの種のものはありません。あればいいのですが、ありませ

リクエストオブジェクトをジャージーアクション(メソッド)に取得する方法、つまり注入する方法は次のとおりです@Context HttpServletRequest httpRequest

編集:HttpRequest自分でオブジェクトを作成するのではなく、サーブレット コンテナーから取得します。サーバーはクライアントの要求からオブジェクトを作成し、提供します。

于 2012-10-10T19:38:33.387 に答える
0

+ elbekは、プレーンサーブレットの状況を説明しますが、現在、プレーンサーブレットを作成する人はほとんどいません。当時は非常にうんざりしていて、多くのWebフレームワークが進化しました。それらのsh*tloadがありますが、良いものはSpringのような依存性注入技術
(たとえば、struts 2)を利用し、認証データを持つことができるプレーンなJava Beanを含む明確なスコープ(アプリケーション/セッション/リクエスト)があります。

J2EEは、サーブレットコンテナとJAASで独自の認証セマンティクスも提供します。これは、セッショントラッキングも使用し、データソース、キュー、EJBなどのバックエンドリソースにアクセスする必要がある場合に役立ちますが、ほとんどのWebアプリケーションはそれを気にしません。

于 2012-10-10T19:54:35.223 に答える