Redirection de deux pages de bienvenue différentes selon le rôle des utilisateurs dans Java Ee 6 / Glassfish

StackOverflow https://stackoverflow.com/questions/9471493

Question

J'ai mis en œuvre une authentification basée sur le formulaire avec Glassfish 3.1 + JDBREALM + MYSQL (MD5). J'ai seulement deux rôles, utilisateur et administrateur. Tout va bien, je peux voir à partir du journal que l'authentification fonctionne dans les deux cas en tant qu'oudet et en tant qu'administrateur (regarder le journal ci-dessous)

q1: est-il possible de faire deux fichiers index différents de sorte que lorsque l'utilisateur soit administrateur, il / elle va à /admin/index.xhtml et lorsque l'utilisateur est en rôle d'utilisateur, il va directement aux visages / utilisateur / index.xhtml?

Q2: Maintenant, lorsque je me suis connecté en tant qu'utilisateur, je peux toujours aller au "côté admin" avec simplement l'écriture du lien entier directement au champ d'adresse dans un navigateur, pourquoi ja comment éviter cela ?

Q3: Lorsque je me suis connecté en tant qu'utilisateur et que j'ai uniquement des visages / Admin / index.xhtml dans la liste des fichiers de bienvenue, il me redirige de ce fichier, même si XML Fichier raconte autre chose, pourquoi ?

<welcome-file-list>
        <welcome-file>faces/admin/index.xhtml</welcome-file> *?? ----> it goes always here, cause it is the first one I think?*
       <welcome-file>faces/user/index.xhtml</welcome-file>
    </welcome-file-list>

    <security-constraint>
        <display-name>Admin Pages</display-name>
        <web-resource-collection>
            <web-resource-name>Protected Admin Area</web-resource-name>
            <description/>
            <url-pattern>/faces/admin/*</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
            <http-method>HEAD</http-method>
            <http-method>PUT</http-method>
            <http-method>OPTIONS</http-method>
            <http-method>TRACE</http-method>
            <http-method>DELETE</http-method>
        </web-resource-collection>
        <auth-constraint>
            <description/>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>
    <security-constraint>
        <display-name>User Pages</display-name>
        <web-resource-collection>
            <web-resource-name>Protected Users Area</web-resource-name>
            <description/>
            <url-pattern>/faces/users/*</url-pattern>
            <!--url-pattern>/faces/users/index.xhtml</url-pattern-->
            <http-method>GET</http-method>
            <http-method>POST</http-method>
            <http-method>HEAD</http-method>
            <http-method>PUT</http-method>
            <http-method>OPTIONS</http-method>
            <http-method>TRACE</http-method>
            <http-method>DELETE</http-method>
        </web-resource-collection>
        <auth-constraint>
            <description/>
            <role-name>user</role-name>
        </auth-constraint>
    </security-constraint>

    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>JDBCRealm</realm-name>
        <form-login-config>
            <form-login-page>/faces/loginForm.xhtml</form-login-page>
            <form-error-page>/faces/loginError.xhtml</form-error-page>
        </form-login-config>

    </login-config>
</web-app>

Journal:

FINE: Login module initialized: class com.sun.enterprise.security.auth.login.JDBCLoginModule
FINEST: JDBC login succeeded for: admin groups:[admin, user]
FINE: JAAS login complete.
FINE: JAAS authentication committed.
FINE: Password login succeeded for : admin
FINE: Set security context as user: admin
FINE: [Web-Security] Setting Policy Context ID: old = null ctxID = jdbcrealm/jdbcrealm
FINE: [Web-Security] hasUserDataPermission perm: (javax.security.jacc.WebUserDataPermission  GET)
FINE: [Web-Security] hasUserDataPermission isGranted: true
FINE: [Web-Security] Policy Context ID was: jdbcrealm/jdbcrealm
FINE: [Web-Security] Codesource with Web URL: file:/jdbcrealm/jdbcrealm
FINE: [Web-Security] Checking Web Permission with Principals : null

(Modifier après la réponse de MyFear) ----- dans Glassfish-web.xml J'ai des rôles comme ça. Si je l'ai bien compris, cela signifie que l'administrateur appartient aux groupes: admin, client et utilisateur. Le client appartient à des groupes: le client et l'utilisateur et l'utilisateur appartiennent à l'utilisateur du groupe. Je l'ai bien compris?

    <security-role-mapping>
    <role-name>admin</role-name>
    <group-name>admin</group-name>
    <group-name>customer</group-name>
    <group-name>user</group-name>
  </security-role-mapping>
  <security-role-mapping>
    <role-name>customer</role-name>
    <group-name>customer</group-name>
    <group-name>user</group-name>
  </security-role-mapping>
  <security-role-mapping>
    <role-name>user</role-name>
    <group-name>user</group-name>
  </security-role-mapping>

</glassfish-web-app>

Merci! Sami

Était-ce utile?

La solution

A1) Les fichiers de bienvenue ne sont pas liés aux rôles.Si vous devez faire n'importe quel type de logique pour effectuer des utilisateurs envoyés, vous devez penser à utiliser booléen httpservletQuest.isuserinrole (rôle de string) ou quelque chose de similaire à découvrir dans quel rôle l'utilisateur est.

A2) qui ne devrait pas arriver.Vous devez vérifier les rôles que vous avez dans votre JDBREALM.À ce que je vois ici, tout est configuré la bonne façon.

A3) Je ne sais pas si je comprends votre remarque "xml" fichier de droite.Mais les fichiers d'accueil ne sont pas liés aux rôles et. Voir A1)

merci, M

Autres conseils

Pour votre question 1: Utilisez le filtre à partir duquel vous pouvez rediriger l'utilisateur sur la page spécifique, utilisateurLogin.xhtml ou adminlogin.xhtml

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    String userName = SecurityAssociation.getPrincipal().getName();
    String userNameSubject = SecurityAssociation.getSubject().toString();

    System.out.println("Yeeey! Get me here and find me in the database: " + userName+ " Subject : "+userNameSubject);

    filterChain.doFilter(servletRequest, servletResponse);
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top