私はそのようなことをしようとしています: https://stackoverflow.com/a/2207147/494826
<security-constraint>
<display-name>Amministrazione</display-name>
<web-resource-collection>
<web-resource-name>wrcollAdmin</web-resource-name>
<description/>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>admin</role-name>
<role-name>guest</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Risorse</web-resource-name>
<url-pattern>/javax.faces.resource/*</url-pattern>
</web-resource-collection>
<!-- No Auth Contraint! -->
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.htm</form-login-page>
<form-error-page>/loginError.htm</form-error-page>
</form-login-config>
</login-config>
私のログイン JSF には以下が含まれます。
<h:form id="loginForm">
<div class="inputlabel">
<h:outputLabel for="j_username" value="Utente:"/>
</div>
<div>
<h:inputText value="#{loginController.username}" id="j_username" size="25" />
</div>
<div class="inputlabel">
<h:outputLabel for="j_password" value="Password:"/>
</div>
<div>
<h:inputText value="#{loginController.password}" id="j_password" size="25" />
</div>
<div>
<h:commandButton action="#{loginController.login}" value="LOGIN" />
</div>
</h:form>
<h:messages styleClass="errors" />
...
そして、ログイン方法は次のとおりです。
public void login() throws IOException {
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext externalContext = context.getExternalContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
try {
log4jLogger.info("LOGIN");
request.login(username, password);
externalContext.redirect("/");
} catch (ServletException e) {
log4jLogger.info("DENIED");
context.addMessage(null, new FacesMessage("Accesso Negato"));
}
}
フォームがメソッドを呼び出さないため、これは機能しません。login()
なんで?web.xml セキュリティ構成のため、そのように動作すると思います。おそらく、loginController (名前付き@ViewScoped
Bean) を保護されたリソースと見なしますか?
2 番目の質問は、より一般的なものです。それはプログラムによるセキュリティを達成するための正しい方法ですか?