Posted on 2010-07-09 11:57
asdtiang 阅读(923)
评论(0) 编辑 收藏
闲话不多说,直接上代码吧:
第一:如何更改acegi的源码:在STS 中工程视图改为project explorer ,在工程上点击右击,有个grails tools,里面刷新下依赖,在工程下就应该出现所有插件的源码了,这样就可以改了。
找到了下类:
改为如何下代码:我也记不清怎么改的了:
/* Copyright 2006-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.codehaus.groovy.grails.plugins.springsecurity;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.security.Authentication;
import org.springframework.security.AuthenticationException;
import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
import org.springframework.security.ui.webapp.AuthenticationProcessingFilter;
import org.springframework.security.util.TextUtils;
import org.springframework.util.StringUtils;
/**
* Extends the default {@link AuthenticationProcessingFilter} to override the
* <code>sendRedirect()</code> logic and always send absolute redirects.
*
* @author Tsuyoshi Yamamoto
*/
public class GrailsAuthenticationProcessingFilter extends
AuthenticationProcessingFilter {
private String _ajaxAuthenticationFailureUrl;
/**
* {@inheritDoc}
*
* @see org.springframework.security.ui.AbstractProcessingFilter#doFilterHttp(javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain)
*/
@Override
public void doFilterHttp(final HttpServletRequest request,
final HttpServletResponse response, final FilterChain chain)
throws IOException, ServletException {
SecurityRequestHolder.set(request, response);
try {
super.doFilterHttp(request, response, chain);
} finally {
SecurityRequestHolder.reset();
}
}
/**
* {@inheritDoc}
*
* @see org.springframework.security.ui.AbstractProcessingFilter#sendRedirect(javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse, java.lang.String)
*/
@Override
protected void sendRedirect(final HttpServletRequest request,
final HttpServletResponse response, final String url)
throws IOException {
RedirectUtils.sendRedirect(request, response, url);
}
/**
* {@inheritDoc}
*
* @see org.springframework.security.ui.AbstractProcessingFilter#determineFailureUrl(javax.servlet.http.HttpServletRequest,
* org.springframework.security.AuthenticationException)
*/
@Override
protected String determineFailureUrl(final HttpServletRequest request,
final AuthenticationException failed) {
String url = super.determineFailureUrl(request, failed);
if (getAuthenticationFailureUrl().equals(url)
&& AuthorizeTools.isAjax(request)) {
url = StringUtils.hasLength(_ajaxAuthenticationFailureUrl) ? _ajaxAuthenticationFailureUrl
: getAuthenticationFailureUrl();
}
return url;
}
/**
* Dependency injection for the Ajax auth fail url.
*
* @param url
* the url
*/
public void setAjaxAuthenticationFailureUrl(final String url) {
_ajaxAuthenticationFailureUrl = url;
}
public Authentication attemptAuthentication(HttpServletRequest request)
throws AuthenticationException {
String inputValidationCode = request.getParameter( "captcha" );
//从Session中取出验证码
String ssnValidationCode = (String)request.getSession().getAttribute( "captcha" );
if( ssnValidationCode != null && !ssnValidationCode.equals( inputValidationCode.toUpperCase() ) ){
//用户输入的值与看到的不一致,抛出异常
throw new ValidationCodeException( "验证码输入错误!");
}
String username = obtainUsername(request);
String password = obtainPassword(request);
System.out.println("testestesetsetestest:"+inputValidationCode);
if (username == null) {
username = "";
}
if (password == null) {
password = "";
}
username = username.trim();
UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(
username, password);
// Place the last username attempted into HttpSession for views
HttpSession session = request.getSession(false);
if (session != null || getAllowSessionCreation()) {
request.getSession().setAttribute(
SPRING_SECURITY_LAST_USERNAME_KEY,
TextUtils.escapeEntities(username));
}
// Allow subclasses to set the "details" property
setDetails(request, authRequest);
return this.getAuthenticationManager().authenticate(authRequest);
}
}
然后再在这外包下面加一个类,其实就是抛出的一个异常类
package org.codehaus.groovy.grails.plugins.springsecurity;
import org.springframework.security.AuthenticationException;
/**
**/
public class ValidationCodeException extends AuthenticationException {
public ValidationCodeException(String s) {
super(s);
}
}
这样就可以了,前台加上代码就行了。
不过,这样还不算玩,如果重做系统之类的,还得改,因为改的代码保存是在C盘。这也让我郁闷啊。这几天换机子,机子坏,改了好几遍了。
记得FCKeditor有上传图片显示不能显示的问题,今天重先发布工程时,网上下载的fckeditor,没改源码也能正常使用了,有点因祸得福的感觉。
天苍苍,野茫茫,风吹草底见牛羊