[img]/upload/attachment/68133/6a54a561-9ef2-338c-a312-ec4867e1f8f9.jpg[/img]
安装ACEGI插件以后,按照步骤一次执行了,
[color=darkblue]grails create-auth-domains User Role Requestmap
grails generate-manager
grails generate-registration[/color]
需要在登录页面扩展验证码,如下:
首先在登录页面的Form内加入如下代码:
[color=blue]<input type="text" name="captcha" id="captcha" size="8"/>
<img src="${createLink(controller:'captcha', action:'index')}" align="absmiddle"/>[/color]
然后修改plugin->acegi 0.4.1 ->src->groovy下的org.codehaus.groovy.grails.plugins.springsecurity.GrailsAuthenticationProcessingFilter的attemptAuthentication方法如下:
[color=blue]String inputValidationCode = httpServletRequest.getParameter( "captcha" );
//从Session中取出验证码
String ssnValidationCode = (String)httpServletRequest.getSession().getAttribute( "captcha" );
if( ssnValidationCode != null && !ssnValidationCode.equals( inputValidationCode.toUpperCase() ) ){
//用户输入的值与看到的不一致,抛出异常
throw new ValidationCodeException( "验证码输入错误!");
}[/color]
并且在相同的package下创建ValidationCodeException类:
[color=blue]package org.codehaus.groovy.grails.plugins.springsecurity
import org.springframework.security.AuthenticationException
/**
* 验证码异常
*/
public class ValidationCodeException extends AuthenticationException {
public ValidationCodeException(String s) {
super(s);
}
}[/color]
再修改projects下的contoller - LoginController的authFail方法,添加如下代码:
[color=blue]else if(exception instanceof ValidationCodeException) {
msg = exception.message[/color]
grails run-app,执行可看到效果。
安装ACEGI插件以后,按照步骤一次执行了,
[color=darkblue]grails create-auth-domains User Role Requestmap
grails generate-manager
grails generate-registration[/color]
需要在登录页面扩展验证码,如下:
首先在登录页面的Form内加入如下代码:
[color=blue]<input type="text" name="captcha" id="captcha" size="8"/>
<img src="${createLink(controller:'captcha', action:'index')}" align="absmiddle"/>[/color]
然后修改plugin->acegi 0.4.1 ->src->groovy下的org.codehaus.groovy.grails.plugins.springsecurity.GrailsAuthenticationProcessingFilter的attemptAuthentication方法如下:
[color=blue]String inputValidationCode = httpServletRequest.getParameter( "captcha" );
//从Session中取出验证码
String ssnValidationCode = (String)httpServletRequest.getSession().getAttribute( "captcha" );
if( ssnValidationCode != null && !ssnValidationCode.equals( inputValidationCode.toUpperCase() ) ){
//用户输入的值与看到的不一致,抛出异常
throw new ValidationCodeException( "验证码输入错误!");
}[/color]
并且在相同的package下创建ValidationCodeException类:
[color=blue]package org.codehaus.groovy.grails.plugins.springsecurity
import org.springframework.security.AuthenticationException
/**
* 验证码异常
*/
public class ValidationCodeException extends AuthenticationException {
public ValidationCodeException(String s) {
super(s);
}
}[/color]
再修改projects下的contoller - LoginController的authFail方法,添加如下代码:
[color=blue]else if(exception instanceof ValidationCodeException) {
msg = exception.message[/color]
grails run-app,执行可看到效果。