これを私のweb.xmlに入れる:
<security-constraint>
<display-name>Amministrazione</display-name>
<web-resource-collection>
<web-resource-name>wrcollAdmin</web-resource-name>
<description/>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.htm</form-login-page>
<form-error-page>/login.htm</form-error-page>
</form-login-config>
</login-config>
webapp の安全な領域を保護することができます。
たとえば、 /admin/page.htm にアクセスしようとすると、 /login.htm にリダイレクトされます。
次に、ユーザー名とパスワードの入力フィールドを持つ JSF2 フォームがあります。ログイン ボタンは、次のように、コントローラーで「login()」メソッドをトリガーします。
public void login() throws IOException {
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext externalContext = context.getExternalContext();
// HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
logged = false;
// request.login(username, password);
if ( users.get(username)!= null && users.get(username).equals(password) ) {
logged = true;
externalContext.redirect("/admin/");
} else {
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Failed","Error"));
}
}
Java EE に次のように伝える方法がわからないため、これは明らかに機能していません。
API は request.login() をサポートしているだけだと思いますが、MemoryRealm や JDBCRealm などは使いたくありません... 他の方法でユーザーの有効性を判断します!
ユーザーをプログラムでログインする方法がない場合、最善の回避策は何ですか? おそらく、単一のユーザー名とパスワードの組み合わせでレルムを作成し、それらを常に request.login() に使用しますか?