私は強くあなたが本当に選択肢を持っていない場合を除き、認証/承認で遊んに対して助言します。
とにかく、JSFを省いてください、それはあまりにも遅くゲームに来ます。
最も簡単な方法は、フィルターに付属のカスタマイズ要求を提供することである。このような
@WebFilter(filterName = "impersonateFilter", urlPatterns = "/*", asyncSupported = true)
public class ImpersonateFilter implements Filter
{
@Override
public void init(FilterConfig filterConfig) throws ServletException
{
// do nothing
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
HttpServletRequest httpRequest = (HttpServletRequest) request;
ImpersonateRequest impersonateRequest = new ImpersonateRequest(httpRequest);
chain.doFilter(impersonateRequest, response);
}
@Override
public void destroy()
{
// do nothing
}
public static class ImpersonateRequest extends HttpServletRequestWrapper
{
protected Principal principal;
public ImpersonateRequest(HttpServletRequest request)
{
super(request);
HttpSession session = request.getSession(false);
if(session != null)
{
principal = (Principal) session.getAttribute(ImpersonateRequest.class.getName());
}
}
@Override
public Principal getUserPrincipal()
{
if(principal == null)
{
principal = super.getUserPrincipal();
}
return principal;
}
public void setUserPrincipal(Principal principal)
{
this.principal = principal;
getSession().setAttribute(ImpersonateRequest.class.getName(), principal);
}
@Override
public String getRemoteUser()
{
return principal == null ? super.getRemoteUser() : principal.getName();
}
}
}
何かが十分でなければなりません。
プリンシパルだけを残して、役割を変更してください。それらを元に戻すことができることを確認してください: - | – EJP
私はいつも私が「偽装する」ものを置く認証機構の周りに(小さな)ラッパーを作成します。だから私は決して認証機構に触れる必要はありません。 – Kukeltje