2012-03-26 50 views
3

现在我使用j安全检查和md5来验证我的jsp页面。我想在将密码存储到数据库之前先对密码进行密码验证。由于学校入学受到限制,我无权创建注入盐的触发器。有没有其他方法可以做到这一点?使用MD5和盐j安全检查

这里是我的境界:

<Realm 
    className="org.apache.catalina.realm.JDBCRealm" 
    driverName="com.mysql.jdbc.Driver" 
    connectionURL="jdbc:mysql://someurl" 
    connectionName="name" 
    connectionPassword="password" 
    userTable="name.users" 
    userNameCol="user_name" 
    userCredCol="user_password" 
    userRoleTable="name.users" 
    roleNameCol="role" 
    digest="MD5" 
    /> 
+0

你是什么意思,你正在使用'j_security_check'?你的意思是你正在使用容器管理认证?你使用什么服务器?如何为这个应用程序配置身份验证? – erickson 2012-03-29 01:57:24

+0

我正在制作一个jsp应用程序并使用运行它的glassfish v.7服务器。所以我设置了我的登录页面,其操作是j_security_check,然后我在我的servlet周围放置了安全约束。 – segFault 2012-03-29 02:29:14

+0

您可以配置用于应用程序的“领域”吗?或者你至少知道什么领域在使用? – erickson 2012-03-29 03:18:42

回答

1

连忙说:“不,你不能,至少,不是简单的”

事实上,消化由public static final Digest(String credentials, String algorithm,String encoding)方法org.apache.catalina.realm.RealmBase类从处理你的JDBCRealm类继承。这个Digest方法直接调用MessageDigest实例,只能用于“MD5”,“SHA-1”和“MD2”我想。因此,在应用MD5 algortihm之前或之后,您无法对密码执行任何操作。但是,您可以使implement a provider拥有您想要的算法。但我警告你,这并不是那么简单。

顺便说一句,我personnally希望有一个SHA-1散列密码比MD5之一,即使它腌:-)

+0

盐渍摘要应该为相同的密码返回不同的值。因此,JDBCRealm的标准实现无法工作,因为它在authn期间比较了'digest'函数的结果。 – kan 2012-04-04 12:20:21

1

我认为,唯一的办法就是让自己实现的很少的功能(覆盖JDBCRealm的方法),比如authenticate