こんにちは
私は現在Guiceと@SessionScopedで遊んでいます。もっとわかりやすくするために、(非常に単純な)認証プロセスを構築することにしました。
以下に、私が行った各ステップについて説明します。それでは、いくつか質問させていただきます。
[1] 人(ゲストまたはユーザー)を表すIdentityクラスを作成しました:
@SessionScoped
public class Identity implements Serializable
{
private String uid;
private String name;
public boolean isAuthenticate()
{
return uid != null;
}
public void logout()
{
this.uid = null;
}
/*Setters-Getters*/
}
[2] 次に、ユーザーにログインする認証クラスを作成しました。
public class Authentication
{
@Override
public Identity authenticate(String login, String password)
{
/*some code*/
Identity identity = new Identity();
identity.setUid(user.getId());
return identity;
}
}
[3] 次に、サーブレットでユーザーにログインします。
@RequestScoped
public class LoginAction
{
@Inject
Injector injector;
protected void login(HttpServletRequest req, HttpServletResponse resp)
{
Identity identity = injector.getInstance(Identity.class);
Authentication auth = new Authentication();
identity = auth.authenticate("login","password");
}
}
[4] 最後に、ユーザーが認証されているかどうかを示すフィルターを作成します。
@Singleton
public class SecurityFilter implements Filter
{
@Inject
private Injector injector;
@Override
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)
{
Identity identity = injector.getInstance(Identity.class);
if(identity.isAuthenticate())
{
System.err.println("USER");
}
else
{
System.err.println("GUEST");
}
chain.doFilter(request, response);
}
}
まあ、このコードは機能していません。私のIDのuidは常に「null」です。
質問に行きましょう:
a-まず第一に、なぜ私のコードが機能しなかったのですか?
b-@ SessionScopedは、HttpSessionでオブジェクトを設定することと同等ですか?
c-(http)セッションでIdentityオブジェクト(それのみ)を無効にする方法は?
d-一般的に、どの場合に@SessionScopedを使用する必要がありましたか?
読んでいただきありがとうございます、
あなたの答えを待っています。