Maison  >  Article  >  Java  >  Autorisation et authentification Java

Autorisation et authentification Java

炎欲天舞
炎欲天舞original
2017-08-04 10:57:561931parcourir

CRMGestion des autorisations

Concept

La gestion des autorisations consiste à gérer les opérations des utilisateurs sur les ressources. Les autorisations (également appelées ressources) de ce système CRM sont implémentées en fonction des autorisations d'opération de rôle, c'est-à-dire RBAC (Role-Based Access Control, contrôle d'accès basé sur les rôles), ce qui signifie que les utilisateurs sont associés à rôles et autorisations. En termes simples, un utilisateur a plusieurs rôles et chaque rôle dispose de plusieurs autorisations. De cette manière, un modèle d'autorisation de type « permission de rôle d'utilisateur » est construit. Dans ce modèle, il existe des relations plusieurs à plusieurs entre les utilisateurs et les rôles, ainsi qu'entre les rôles et les autorisations. Afin de réaliser la relation plusieurs à plusieurs entre les tables, une relation plusieurs à plusieurs doit être divisée en deux. relation à plusieurs. Par conséquent, des tables intermédiaires, des tables de rôles d'utilisateur et des tables d'autorisations de rôle sont introduites.

2. Le module de gestion des autorisations de la base de données

implique un total de cinq tables  :

  1. Trois tables principales

a) Table des utilisateurs (t_user),

b) Table des rôles (t_role),

c ) Table de ressources (t_module),

2. Deux tables intermédiaires

a) Table de rôles utilisateur (t_user_role),

b) Table de rôles-ressources (t_permission),

3. Mise en place de la gestion des autorisations

1. Module, rôle, utilisateur table unique CRUD

Module CRUD : exploiter la table t_module

Rôle CRUD : exploiter la table t_role

Utilisateur CRUD : exploiter la table t_role

2. Autorisation

Autorisations d'octroi de rôle

Accorder des autorisations à Rôles : utilisez ztree pour construire l'arborescence des autorisations

a) Accorder des autorisations

1. Liez d'abord ce module

2. Liez le module parent 🎜> Puisque elle dans In ining in in 2. Supprimer les sous-modules; est, associez-le)

a) Utilisez le plug-in jQuery zTree pour créer une structure arborescente de ressources, le contenu de l'arborescence est

données dans table t_module

b) Utilisez la souris pour cliquer sur la sélection case dans zTree pour faire fonctionner la

table t_permission (table de ressources de rôle)

pour implémenter le rôle Accorder des autorisations

Attribuer des rôles aux utilisateurs Accorder des rôles aux utilisateurs : utilisez la liste déroulante multi-sélection a). Ajouter un compte : accédez directement à t_user_role insérer un enregistrement

b) . Modifier le compte : supprimez d'abord, puis ajoutez

.

Lors de la création d'un utilisateur ou de la modification des informations utilisateur, vous pouvez utiliser la zone de sélection multiple de la liste déroulante pour attribuer des opérations de rôle à l'utilisateur t_user_role (table des rôles utilisateur)

3. Authentification

Idée :

À partir de la table t_permission Obtenez la valeur d'autorisation (acl_value) de la page et comparez-la avec la valeur transmise par la page ou avec la valeur d'autorisation spécifiée dans l'annotation :

 1. La page passe Request.getParameter("permission"); Interrogez la liste d'autorisations trouvée dans la base de données en fonction de l'ID utilisateur contient

2. Clarifiez la valeur d'autorisation du module via des annotations : @requirePermission(permission="1010";

Authentification backend : Spring AOP et annotations personnalisées Implémenter l'authentification

Obtenir les autorisations de l'utilisateur et les stocker dans la session. Ensuite, lorsque l'utilisateur exploite une ressource, la valeur d'autorisation d'une ressource sera soumise pour déterminer. si l'utilisateur dispose de cette autorisation

Utiliser Spring AOP pour intercepter l'authentification

1ère étape : activer le pilote d'annotation & lt; aop : aspectj-autoproxy /& gt; Étape 2 : Créer une classe proxy pour utiliser l'annotation @Compone @Component Trois étapes : Définir un point de départ @pointcut ("*Execution ('com.shsxt.controller.*.*(((((..)))")

Public void PointCut () {}>

              Étape 4 : Rédiger une amélioration : @Around(value="pointcut()")

                                                                                                             Autorisations utilisateur

                                                              

Annotation personnalisée

    2. Écrivez la classe d'aspect
  1. pour définir le point d'entrée : La méthode d'auto-interception des annotations d'autorisation peut améliorer les performances

Obtenu en passant le paramètre d'autorisation au premier plan :

Obtenu par annotations

3. Introduisez l'espace de nom AOP et activez le pilote d'annotation AOP

//@Pointcut("execution(* com.shsxt.controller.*.*(..))")
    @Pointcut("@annotation(com.shsxt.annotation.RequirePermissions)")    
    public void pointcut() {
    }

List<String> permissions = permissionService.findRolePermissions(roleIds.substring(0, roleIds.lastIndexOf(",")));
       String permissioFront = request.getParameter("permission"); // 后台权限认证
       AssertUtil.isTrue(!permissions.contains(permissioFront), "您无权操作此模块");

4. Activer les annotations sur les méthodes qui nécessitent une authentification par autorisation

List<String> permissions = permissionService.findRolePermissions(roleIds.substring(0, roleIds.lastIndexOf(",")));     
  
    if (requirePermissions != null) {

        String permission = requirePermissions.permission(); // 后台权限认证

        throw new UnAuthPermissionException(permission, "您无权操作此模块");

    }

L'autorisation doit être cohérente avec la valeur act_value dans la table du module

Authentification frontale : jugement de fonction intégré de Freemarker
<!-- 启用@Aspect注解 -->

<aop:aspectj-autoproxy />

Obtenir les autorisations de l'utilisateur Utilisez ensuite la syntaxe freemarker dans le freemarker frontal pour déterminer si l'utilisateur peut utiliser cette ressource (list?seq_contains('permission value '))

1.SQL :

2. Interroger l'autorisation dans la classe d'aspect AOP pour récupérer la liste des valeurs d'autorisation et la mettre dans la session

3. Jugement de la première page : Explication : Utilisez la fonction intégrée de freemarker sql_contains pour juger si la séquence contient des valeurs de paramètres. Contains renvoie true

est similaire à la collection hashmap.contains(. valeur) en java;

SELECT

       DISTINCT p.acl_value

FROM

       t_permission p
-- LEFT JOIN t_role r ON r.id = ur.role_id

left JOIN t_user_role ur on p.role_id = ur.role_id

WHERE

       ur.user_id = 10;

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn