在我的托管bean中,我希望将作为bean属性的j_security_check
用户名获取到LDAP服务器。
基本上,我想从
中提取用户名<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();
*
* }
* .
*/
}
答案 0 :(得分:5)
在@PostConstruct
初始化。
private String username;
@PostConstruct
public void init() {
username = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
}
或者,如果您在处理表单提交期间只需要它,则只需在操作方法中获取它。
请注意,getRemoteUser()
基本上与getUserPrincipal().getName()
返回相同。
无关具体问题:这种bean不应该是会话范围的,而是视图或会话作用域。此外,它不应实现Principal
接口。这没有任何意义。