Comment obtenir des Rôles de UserPrincipal en Java?
J'ai créé une classe(Nommé en tant que CustomRequestWrapper) qui est la mise en œuvre de HttpServletRequestWrapper .Dans CustomRequestWrapper classe je suis en train d'utilisateur principal.Maintenant, dans mon code, je veux avoir la liste des rôles de l'utilisateur principal.J'ai essayé d'utiliser GenericPrincipal de tomcat-catalina pot mais je suis arriver casting d'exception CustomRequestWrapper ne peut pas être lancé à GenericPrincipal. Pouvait-on idée de comment obtenir des rôles de l'utilisateur principal?
Note: j'utilise Apache Tomcat Serveur
Voici mon code:
public class CustomRequestWrapper extends javax.servlet.http.HttpServletRequestWrapper {
public CustomRequestWrapper(String User,List<String> roles,HttpServletRequest request) {
super(request);
this.user=User;
this.roles=roles;
this.realRequest=request;
headerMap = new HashMap();
}
String user;
List<String> roles = null;
HttpServletRequest realRequest;
private Map headerMap;
public void addHeader(String name, String value) {
headerMap.put(name, new String(value));
}
public Enumeration getHeaderNames() {
HttpServletRequest request = (HttpServletRequest) getRequest();
List list = new ArrayList();
for (Enumeration e = request.getHeaderNames(); e.hasMoreElements();) {
list.add(e.nextElement().toString());
}
for (Iterator i = headerMap.keySet().iterator(); i.hasNext();) {
list.add(i.next());
}
return Collections.enumeration(list);
}
public String getHeader(String name) {
Object value;
if ((value = headerMap.get("" + name)) != null)
return value.toString();
else
return ((HttpServletRequest) getRequest()).getHeader(name);
}
@override
public boolean isUserInRole(String role) {
if (roles == null) {
return this.realRequest.isUserInRole(role);
}
return roles.contains(role);
}
@override
public Principal getUserPrincipal() {
if (this.user == null) {
return realRequest.getUserPrincipal();
}
//make an anonymous implementation to just return our user
return new Principal() {
public String getName() {
return user;
}
};
}
}
Êtes-vous essayer d'obtenir les rôles pour un tomcat utilisateur authentifié, c'est les rôles déclaré dans tomcat-users.xml ?
Pas de .J'essaie d'obtenir les rôles pour mon application utilisateur authentifié
Fine, pourriez-vous montrer le code pour vous
S'il vous plaît vérifier ,j'ai téléchargé mon code
Pas de .J'essaie d'obtenir les rôles pour mon application utilisateur authentifié
Fine, pourriez-vous montrer le code pour vous
CustomRequestWrapper
?S'il vous plaît vérifier ,j'ai téléchargé mon code
OriginalL'auteur Nadendla | 2014-05-28
Vous devez vous connecter pour publier un commentaire.
À partir de votre code, vous pouvez injecter le nom d'utilisateur et les rôles dans votre
CustomRequestWrapper
dans le constructeur. Comme vous l'avez remplacégetUserPrincipal
dansCustomRequestWrapper
elle renvoie n'est plus un tomcatGenericPrincipal
mais votre classe anonyme qui ne connaît que de retourner le nom de l'utilisateur que vous avez donné, cette viagetName()
. Vous devriez essayer de retourner un tomcatGenericPrincipal
parAlternativement, vous pouvez créer une implémentation personnalisée de Capital de savoir à propos des rôles.
Qui ne fonctionnera que si vous avez réussi à injecter de l'utilisateur et de ses rôles au
CustomRequestWrapper
construction.OriginalL'auteur Serge Ballesta
L'exception vous l'avez mentionné, pourrait être la clé pour résoudre votre problème
Vous devez lancer le
Principal
objet et non pas leCustomRequestWrapper
. Voici un exemple de la méthode que vous pouvez ajouter dans votreCustomRequestWrapper
classe et qui doit retourner la liste des rôles d'utilisateur sous Tomcat. (Je suppose que c'est un désordre de la méthode):Donc la dernière
CustomRequestWrapper
sera comme suit:OriginalL'auteur tmarwen