0

我是 Java EE 的新手,并不真正知道应该如何实现登录系统。假设我有一个带有用户表的 mysql 数据库,它得到了用户名和密码列。我应该如何实施安全的登录系统?所谓安全,是指我发送密码时的基本网络安全性,例如散列密码和 SSL 连接。

我查看基于表单的登录,但我可以理解如何通过内置页面 j_security_check 从数据库中获取数据?我不需要以某种方式定义连接字符串吗?然后我在哪里定义使用哈希和 SSL?

我正在使用tomcat v7.0。

4

1 回答 1

3

第一件事:不要将密码存储在数据库中。您可以存储哈希值。

这是一个简单的方法:

  1. 添加一个包含用户名和密码字段的表单。
  2. 创建一个会话范围的托管 bean,称为示例用户。
  3. 在 bean 中创建属性用户名和密码(不要忘记访问器)。
  4. 将表单与您创建的属性绑定(作为 JSF #{userBean.username} 中的示例)。
  5. 在 bean 中创建一个名为 authorize 的方法。
  6. 将方法与表单上的提交按钮绑定。
  7. 在授权方法中创建密码哈希,并尝试在用户表中找到具有表单中用户名和密码的行。
  8. 成功重定向到另一个页面时,将密码字段设为空并使用用户名字段来识别谁已登录。

这是我能想象到的在 Java EE 中实现授权的最简单方法。

放一张这样的表格:

<h:form id="loginForm">
    <h:inputText maxlength="255" size="20" tabindex="10" value="#{userBean.login}"
                    styleClass="inputField" id="username"/>
    <h:inputSecret maxlength="255" size="20" tabindex="20"
                     value="#{userBean.password}" styleClass="inputField" id="password"/>
    <h:commandButton value="login"
                                 action="#{userBean.validate}" id="submit"/>
</h:form>

和托管bean:

@ManagedBean(name = "userBean")
@SessionScoped
public class UserBean {
    private User user;
    private String login;
    private String password;

    @PostConstruct
    private void init() {
        this.user = new User();
    }

    public String validate() {
        // Validate given login and password here
        // When user seems to be valid assign it to this.user and return "/someFileForAuthorizedUsers.xhtml";
        this.login = null;
        this.password = null;

        return null;
    }
}

不要忘记访问器。JSF 需要它们。

于 2013-02-24T20:08:52.163 回答