典型的acegi登陆代码如下:
<form action="j_acegi_security_check" method="POST">
<table>
<tr><td>User:</td><td><input type='text' name='j_username'></td></tr>
<tr><td>Password:</td><td><input type='password' name='j_password'></td></tr>
<tr><td colspan='2'><input name="submit" type="submit"></td></tr>
<tr><td colspan='2'><input name="reset" type="reset"></td></tr>
</table>
</form>
然后通过配置文件
<bean id="authenticationProcessingFilter" class="net.sf.acegisecurity.ui.webapp.AuthenticationProcessingFilter"> <property name="authenticationManager"><ref bean="authenticationManager"/></property> <property name="authenticationFailureUrl"><value>/login.jsp?login_error=1</value></property> <property name="defaultTargetUrl"><value>/index.jsp</value></property> <property name="filterProcessesUrl"><value>/j_acegi_security_check</value></property> </bean>
来调用相关的类.
在基于jsf的aom中可以自己来定义登陆界面,然后直接调用acegi API中的方法,如下:
<w:form id="loginForm">
<w:textField name="username" id="username"></w:textField><br/>
<w:textField name="passwd" id="passwd"></w:textField><br/>
<w:button id="loginBtn"/>
<h:outputText id="backMessage"></h:outputText>
</w:form>
LoginBean类方法如下:
@Action(id = "loginBtn")
public void loginBtn() {
try {
UsernamePasswordAuthenticationToken authReq = new UsernamePasswordAuthenticationToken(
username, passwd);
Authentication auth = authenticationManager.authenticate(authReq);
if (auth.isAuthenticated()) {
Browser
.execClientScript("parent.location.href='../index.faces';");
}
} catch (BadCredentialsException e) {
backMessage = "用户密码不匹配或无角色?";
}
}