`
floger
  • 浏览: 213351 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

acegi的验证问题1 ---中文用户名登录,及md5加密密码方式

阅读更多

在框架中使用了acegi,但是割接了一个微软的系统,系统中出现了中文用户名登录,这就造成了问题。
因为之前acegi都是另一个同事负责,现在同事不在,只能自己解决,找到acegi中取得用户名的地方
org.acegisecurity.ui.webapp.AuthenticationProcessingFilter 中的这段代码

 1public Authentication attemptAuthentication(HttpServletRequest request)
 2        throws AuthenticationException {
 3        String username = obtainUsername(request);
 4        String password = obtainPassword(request);
 5
 6        if (username == null{
 7            username = "";
 8        }

 9
10        if (password == null{
11            password = "";
12        }

13
14        UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);
15
16        // Place the last username attempted into HttpSession for views
17        request.getSession().setAttribute(ACEGI_SECURITY_LAST_USERNAME_KEY, username);
18
19        // Allow subclasses to set the "details" property
20        setDetails(request, authRequest);
21
22        return this.getAuthenticationManager().authenticate(authRequest);
23    }

24


取出username后发现是乱码,如果解决这个问题呢?第一个想到的是转码

username=new String(username.getBytes("ISO8859-1"),"UTF-8");
解决问题,但是这段代码要嵌入到acegi中必须重新编译acegi

上边的办法改动太大,再想办法,想到既然问题是来自编码,看看web.xml的filter发现原因在这
spring的filter是解决编码问题的,但是因为acegi的filter在spring之前,所以编码没有转码。又不能把acegi的filter挪到spring filter之后,这样就有安全问题了。

那就增加一个filter,只过滤登录链接,然后设置一下代替spring的encodingfilter设置一下编码,解决问题

public class EncodeChnUsernameFilter implements Filter{
    
private static final String ACEGI_SECURITY_FORM_USERNAME_KEY ="j_username";
    
private static final String ACEGI_SECURITY_FORM_PASSWORD_KEY = "j_password";
    
public void destroy() {
        
    }


    
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding(
"UTF-8");
        chain.doFilter(request, response);
    }


    
public void init(FilterConfig arg0) throws ServletException {
        
    }

}

中文用户名登录问题解决了。

但是另一个问题来了,密码是非明文的md5加密的,需要加密,同样不想更改acegi。
那好吧继续使用filter,看看能否getParameter后再set回去

String password= request.getParameter("j_password");
//这里是个md5加密函数
password = md5(password);
//怎么set进去呢?
request.getParameterMap().put("j_password",password);
//启动试一下,异常报错,map不能put,看一下异常,发现这个不是普通的map,是org.apache.catalina.util.ParameterMap,这个map中有个标志位lock,tomcat不让更改http接收到的值。
//基于不服输的精神,一定要搞定它,呵呵
ParameterMap map = (ParameterMap)request.getParameterMap();
map.setLock(
false);
map.put(
"j_password",password);
map.setLock(
true);
//搞定?不对,编译不通过,发现org.apache.catalina.util.ParameterMap的jar包是catalina.jar。
把这个包放到lib下编译,通过,运行出向下转型错误,仔细看一下发现request.getParameterMap()出来的ParameterMap.getClass()的id是300多,而接受转型
的ParameterMap.class.getClass()是6000多,不是一个类啊。想想也对,lib下和tomcat的server/lib下各有一个catalina.jar这个就是两个类了。

eclipse add 外部jar包,直接add上tomcat中的catalina.jar,编译运行,还是有问题,这次是报的classNotFound异常,为什么会这样呢,命名Server
/lib下有这个jar包,后来想了下明白了。tomcat一定是限定了catalina.jar不能被普通的用户类所直接引用。处于安全性考虑吧。这条路走不通了,回到acegi才发现acegi的配置文件中是可以随意配置autheticationfilter的,自己写一个autheticationfilter,配置进去,不用系统的,解决问题,filter里边怎么写都没问题,爱怎么处理怎么处理,呵呵
分享到:
评论

相关推荐

    acegi的详细配置实现

    1. **用户提交凭据**:用户通过登录页面或其他方式提交用户名和密码。 2. **身份验证**:认证管理器使用提供的凭据来验证用户的身份。 3. **认证成功/失败**:如果认证成功,则用户将被授权访问特定资源;如果失败,...

    acegidemo代码

    Acegi提供了一些预定义的PasswordEncoder实现,如MD5或SHA。在AcegiDemo中,可以看到如何配置和使用这些加密算法。 7. **Role-Based Access Control (RBAC)**: RBAC模型在AcegiDemo中扮演关键角色,它允许定义...

    springsecurity.pdf

    摘要认证机制是一种基于MD5或SHA等摘要算法的认证方式,相比BASIC认证更安全。 ##### 13.2 配置 配置摘要认证机制需要设置摘要算法、挑战字符串等参数。 #### 十三、匿名认证 ##### 14.1 概览 匿名认证允许用户...

    java开源包7

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

    java开源包1

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

    java开源包5

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

    JAVA上百实例源码以及开源项目源代码

    Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四”...

    java开源包10

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

    java开源包4

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

    java开源包11

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

    java开源包2

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

    java开源包3

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

    java开源包6

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

    java开源包8

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

    java开源包9

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

    java开源包101

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

    Java资源包01

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

Global site tag (gtag.js) - Google Analytics