JSFでは、セッションがの前に作成され、のログインに成功したようです。つまり単にログインページを要求すると、新しいセッションが作成される。JSFログイン時にセッションが作成されるのはいつですか?
正常にログインしたユーザーではなく、受信したリクエストごとにセッションを作成するのは非常に浪費的(DDoS攻撃の脆弱性)のようです。
以下のコードはかなり一般的ですが、私が参照しているシンプルなシナリオの種類を示しています。
いるindex.xhtml:
<html>
<body>
<h:form id="login">
<h:outputLabel for="username">Username</h:outputLabel>
<p:inputText id="username" name="username" value="#{userController.username}"/>
<h:outputLabel for="password">Password</h:outputLabel>
<p:password id="password" name="password" value="#{userController.password}"/>
<p:commandButton id="loginButton" value="login" action="#{loginController.login}"/>
</h:form>
</body>
</html>
LoginController.java
@ViewScoped
public class LoginController implements Serializable {
String username;
String password;
public void login(){
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
if (request.getSession(false) == null){
System.out.println("No session.");
} else {
System.out.println("Session already exists.");
}
try {
request.login(username, password);
} catch (ServletException e) {
FacesContext.getCurrentInstance.addMessage(null, new FacesMessage("Login failure", e.getMessage()));
}
}
// username and password getters/setters
}
編集:すべての
告白 - サンプルコードは、生産コードから大幅に変更されました。私はもともとgetSession(false)を使用していました。しかしそれを除いて、私が思ったことを確認してくれてありがとう。私はJSFがセッションを自動作成したことを明白に確認していませんでした(本、ブログ、Oracleのドキュメント)。 – MMeldrum
これは、(ログイン資格情報がなくても)新しいログイン要求をサーバーに適用してサーバーを停止させることを実際には容易にしますか? – MMeldrum
サーバーのハードウェアと構成によって異なります。例えば。接続/要求プーリング、セッションタイムアウト、使用可能メモリ、ネットワーク帯域幅などが含まれます。 – BalusC