3

在我的托管 bean 中,我希望获取j_security_checkLDAP 服务器的用户名作为 bean 属性。

本质上,我想从中提取用户名

<input type="text" name="j_username" />

一旦提交并全部验证并在以下情况下使用它:

@Override
public String getName() {
    return getId();
}

我将如何使用

FacesContext.getExternalContext().getUserPrincipal();

获取用户名作为 bean 属性?

如果您需要知道在做什么,这是完整的支持 bean。我曾经手动让用户在文本框中输入用户名,我现在想停止它并让它自动提取用户名。

//@Named("user")
@SessionScoped
public class UserBean implements Serializable, Principal {

    private static final long serialVersionUID = 1L;
    @NotNull(message = "The username can not be blank")
    @Size(min = 6, max = 12, message = "Please enter a valid username (6-12 characters)")
//@Pattern(regexp = "[a-zA-Z0-9_]", message = "Please enter a valid username consiting of only characters that are from the alphabet or are numeric ")
//@Pattern(regexp = "(a-z)(A-Z)(0-9))", message = "Please enter a valid username consiting of only characters that are from the alphabet or are numeric ")
    private String id;

    public String getId() {
        return id;
    }

    public void setId(String newValue) {
        id = newValue;
    }
    private String fileText;

    @NotNull(message = "You must select a file to upload")
    public String getFileText() {
        return fileText;
    }

    public void setFileText(String fileText) {
        this.fileText = fileText;
    }

    /**
     * public void getName(HttpServletRequest req, HttpServletResponse res)
     * throws ServletException, java.io.IOException { id = req.getRemoteUser();
     * }
     */
    @Override
    public String getName() {
        return getId();
    }
    /*
     * @Override
     *
     * public String request.remoteUser() { return getId();
     *
     * }
     * .
     */
} 
4

1 回答 1

5

初始化它在@PostConstruct.

private String username;

@PostConstruct
public void init() {
    username = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
}

或者,如果您只在处理表单提交时需要它,只需在 action 方法中获取即可。

请注意,getRemoteUser()基本上返回与getUserPrincipal().getName().


与具体问题无关:这种 bean 不应该是会话范围的,而是视图或会话范围的。此外,它不应该实现Principal接口。这完全没有意义。

于 2013-01-22T15:57:58.253 回答