コンテナー管理認証を使用する場合 (あなたの場合のように)、ユーザー名はコンテナー セキュリティ コンテキストに格納されます。サーブレット仕様は、ユーザー名を保持するユーザー プリンシパル( のインスタンス)へのアクセスを許可する API を提供します。java.security.Principal
そのため、ユーザーがログインすると、Java コードから、HttpServletRequest.getUserPrincipal()
またはユーザー名を使用してユーザー プリンシパルにアクセスできます。HttpServletRequest.getRemoteUser()
またはFacesContext.getCurrentInstance().getExternalContext().getRemoteUser()
JSP/JSF ファイルで使用するには、次のように式言語を使用してアクセスできます#{request.remoteUser}
。
<h:inputText id="username" value="#{request.remoteUser}" />
追加:
ユーザー バッキング Bean:
public class User implements Serializable {
private String name;
// other user attributes here
public String getName() {
return name;
}
}
JSF フィルターを追加します。
public class SetupUserFilter implements Filter {
public void init(FilterConfig config) { }
public void destroy() { }
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpSession session = request.getSession(false);
if (session != null) {
User user = session.getAttribute("user");
if (user == null && request.getUserPrincipal() != null) {
// This means user has just logged in.
String username = request.getRemoteUser();
User user = ... // load the User instance from the database using the username
session.setAttribute("user", user);
}
}
chain.doFilter(req, res);
}
}
でフィルタを構成しますweb.xml
。
<filter>
<filter-name>SetupUserFilter</filter-name>
<filter-class>com.example.SetupUserFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SetupUserFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
User
次に、常にBeanに依存します。
<h:inputText id="username" value="#{user.name}" />
免責事項: これは単なる例です。フィルターを使用するため少し古いものであり、他のアプローチも有効である可能性がありますが、これは JSF 以外の環境でも機能します。自由に使用してください。ただし、これが探しているものを取得する唯一の方法ではないことを理解してください。