Немного связана проблема:
Людям, преобразующим старый код API IBM Portlet в JSR168, нужно было изменить PortletRequest на HttpServletRequest в некоторых параметрах метода, но затем из WPS6.1 и выше они не могут преобразовать это в PortletRequest (он больше не реализует соответствующий интерфейс) как кажется) и если они вызывают «getRemoteUser» непосредственно в запросе HttpServletRequest, они возвращаются к нулю (некоторые говорят, что обходной путь - включить параметр безопасности приложения в WAS [WebSphere Application Server]), другие говорят, что в сети требуется больше разметки, связанной с безопасностью. XML)
Обходным решением может быть использование PUMA, но, конечно, это специфично для IBM WebSphere. Вероятно, в других контейнерах портлетов есть другие обходные пути, специфичные для поставщика, если кто-то обнаружит, что getRemoteUser всегда возвращает null (судя по другим ответам, тогда getUserPrincipal (). GetName () также возвращает null, если getRemoteUser реализован как просто ярлык для этого).
Кстати, код PUMA, о котором я упоминал выше, находится здесь, так как немного трудно найти, что работает в 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");
}
}