Nieco pokrewny problem:
Ludzie konwertazy starszą IBM Portlet kod API do JSR168 jednej musiał zmienić PortletRequest do HttpServletRequest w niektórych parametrów metody, ale potem z WPS6.1 i więcej, nie mogą tego przesłać do PortletRequest (nie implementuje on już odpowiedniego interfejsu, jak się wydaje) i jeśli wywołają "getRemoteUser" bezpośrednio w HttpServletRequest, zwracają wartość zerową (niektórzy twierdzą, że obejściem jest włączenie zabezpieczeń aplikacji opcja w WAS [WebSphere Application Server], inni twierdzą, że w web.xml potrzebny jest więcej znaczników związanych z bezpieczeństwem)
Wydaje się, że rozwiązaniem pośrednim jest PUMA, ale oczywiście jest to specyficzne dla IBM WebSphere. Prawdopodobnie w innych kontenerach portletów istnieją inne sposoby obchodzenia się z dostawcami, jeśli stwierdzisz, że getRemoteUser zawsze zwraca wartość null (sądząc po innych odpowiedziach, a następnie getUserPrincipal(). Funkcja getName() zwraca również wartość null, jeśli getRemoteUser jest zaimplementowany jako skrót do tego).
BTW, kod PUMA wspominam powyżej, jest tutaj, ponieważ jest to trochę trudne do znalezienia, co działa w WPS6.1 +:
import com.ibm.portal.portlet.service.PortletServiceHome;
import com.ibm.portal.um.*;
import com.ibm.portal.um.exceptions.PumaException;
import com.ibm.portal.puma.User;
//...
public String getCurrentUser(){
try {
Context ctx = new InitialContext();
Name myjndiname = new CompositeName(PumaHome.JNDI_NAME);
PumaHome myHome = (PumaHome) ctx.lookup(myjndiname);
if (myHome!=null) {
PumaProfile pumaProfile = myHome.getProfile();
com.ibm.portal.um.User user = (com.ibm.portal.um.User)pumaProfile.getCurrentUser();
List attributes = new ArrayList();
attributes.add("uid");
Map userAttributes = pumaProfile.getAttributes(user,attributes);
return (String) userAttributes.get("uid");
}
}
szukam więcej wglądu. Jaka jest semantyka obu ... jak się różnią. Czy dadzą ci dwa różne wyniki? Czy zawsze są takie same? – Dimitry
+1 wydaje mi się to całkiem jasne. Chodzi mi o to, że zawsze możesz spojrzeć na kod, ale wyobrażam sobie, że jeden pochodzi z drugiego. –
-1. ** getRemoteUser() ** może mieć wartość ** null **, gdy ** getUserPrincipal() ** nie jest ... Otrzymuję ten problem z * Spring MVC test framework *. ** getUserPrincipal(). GetName() ** jest właściwym rozwiązaniem! – gavenkoa