java - 是否可以将容器管理的身份验证与密码加盐一起使用?

标签 java jsf jakarta-ee jsf-2 jaspic

我知道如何设置使用表单例份验证并使用摘要密码(例如 SHA-256)的普通容器管理的安全性。像这样:

web.xml

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>jdbc</realm-name>
    <form-login-config>
        <form-login-page>/login.jsf</form-login-page>
        <form-error-page>/login-error.jsf</form-error-page>
    </form-login-config>
</login-config>

登录.xhtml

<form action="j_security_check">
    <p><label>
        Username:<br/>
        <input type="text" name="j_username" />
    </label></p>
    <p><label>
        Password:<br/>
        <input type="password" name="j_password" />
    </label></p>
    <p>
        <button type="submit">Submit</button>
    </p>
</form>

非常简单 - 但我真正希望能够做的是用全局 salt 和用户名对密码进行 salt。是的,我知道 this isn't ideal但现在,我只是在构建一个概念验证。

容器(在本例中为 GlassFish 3)能否为我执行此操作,还是我必须 write my own login filter ?我以前做过(针对 J2EE 应用程序),但我的直觉告诉我,现在我使用的是 Java EE 6,必须有更严格的方法来完成它。

最佳答案

我觉得您正在寻找一种快速(而且可能很脏?)的方法来修改内置身份验证提供程序。

正确的方法是为新的 JASPIC API ( JSR-196 ) 实现您自己的 Java 身份验证服务提供程序。它比较费力,但这种方法允许您以任何喜欢的方式滚动实现,并且它应该与任何 Java EE 6 应用服务器兼容。

对于带有密码加盐的基本身份验证方案,实现这样的提供程序应该非常简单。您将不得不考虑管理用户和密码,但一种解决方案可能是让您的提供商重新使用在 Glassfish 身份验证领域中定义的用户,这样您只需自己管理自定义加盐密码。

有一个很好的 WebSphere 教程,您应该可以将其改编为 Glassfish here .

关于java - 是否可以将容器管理的身份验证与密码加盐一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4413407/

相关文章:

java - 如果名称变量以下划线为前缀,则 Bean 验证不起作用

java - 向 JavaEE 应用程序添加类的成本是多少

java - 无法使用 Maven 解决 Artifact 错误

jsf - 如何定位要被 p :blockUI/pe:blockUI? 阻止的整个 JSF 页面

jsf - 将 primefaces 7 更新为 primefaces 8 时出现 java.lang.InstantiationError : org. primefaces.util.Lazy

java - HTML 表单方法 POST 调用 java servlet doGet 方法

java - 无法解析 getter 方法

java - 使用 Datastax 驱动程序 3.6 的 Cassandra 分页 : Null paging state and fetch size not honoured

java - 参数为可变参数时的 Class.getMethod

java - Servlet 没有重定向到带有参数的 URL