Pārlūkot izejas kodu

增加根据用户id获取角色接口

shuzheng 9 gadi atpakaļ
vecāks
revīzija
78e5be8a33

+ 6 - 0
zheng-upms/zheng-upms-client/src/main/java/com/zheng/upms/client/filter/SSOFilter.java

@@ -14,6 +14,9 @@ import org.apache.http.client.methods.HttpPost;
 import org.apache.http.impl.client.DefaultHttpClient;
 import org.apache.http.message.BasicNameValuePair;
 import org.apache.http.util.EntityUtils;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.session.Session;
+import org.apache.shiro.subject.Subject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -62,6 +65,9 @@ public class SSOFilter implements Filter {
         String clientSessionId = CookieUtil.getCookie(request, ZHENG_UPMS_CLIENT_SESSION_ID);
         if (StringUtils.isEmpty(clientSessionId)) {
             clientSessionId = request.getSession().getId();
+//            Subject subject = SecurityUtils.getSubject();
+//            Session session = subject.getSession();
+//            clientSessionId = session.getId();
             CookieUtil.setCookie(response, ZHENG_UPMS_CLIENT_SESSION_ID, clientSessionId);
         }
 

+ 9 - 1
zheng-upms/zheng-upms-rpc-api/src/main/java/com/zheng/upms/rpc/api/UpmsApiService.java

@@ -1,6 +1,7 @@
 package com.zheng.upms.rpc.api;
 
 import com.zheng.upms.dao.model.UpmsPermission;
+import com.zheng.upms.dao.model.UpmsRole;
 
 import java.util.List;
 
@@ -11,10 +12,17 @@ import java.util.List;
 public interface UpmsApiService {
 
     /**
-     * 根据用户id获取所拥有的权限
+     * 根据用户id获取所拥有的权限(用户和角色权限合集)
      * @param upmsUserId
      * @return
      */
     List<UpmsPermission> selectUpmsPermissionByUpmsUserId(Integer upmsUserId);
 
+    /**
+     * 根据用户id获取所属的角色
+     * @param upmsUserId
+     * @return
+     */
+    List<UpmsRole> selectUpmsRoleByUpmsUserId(Integer upmsUserId);
+
 }

+ 4 - 0
zheng-upms/zheng-upms-rpc-service/src/main/java/com/zheng/upms/dao/mapper/UpmsApiMapper.java

@@ -2,6 +2,7 @@ package com.zheng.upms.dao.mapper;
 
 
 import com.zheng.upms.dao.model.UpmsPermission;
+import com.zheng.upms.dao.model.UpmsRole;
 
 import java.util.List;
 
@@ -13,5 +14,8 @@ public interface UpmsApiMapper {
 
 	// 根据用户id获取所拥有的权限
 	List<UpmsPermission> selectUpmsPermissionByUpmsUserId(Integer upmsUserId);
+
+	// 根据用户id获取所属的角色
+	List<UpmsRole> selectUpmsRoleByUpmsUserId(Integer upmsUserId);
 	
 }

+ 27 - 4
zheng-upms/zheng-upms-rpc-service/src/main/java/com/zheng/upms/dao/mapper/UpmsApiMapper.xml

@@ -2,7 +2,7 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zheng.upms.dao.mapper.UpmsApiMapper">
 
-	<!-- 结果映射关系 -->
+	<!-- 权限 -->
 	<resultMap id="UpmsPermissionResultMap" type="com.zheng.upms.dao.model.UpmsPermission">
 		<id column="permission_id" jdbcType="INTEGER" property="permissionId" />
 		<result column="system_id" jdbcType="INTEGER" property="systemId" />
@@ -17,15 +17,29 @@
 		<result column="orders" jdbcType="BIGINT" property="orders" />
 	</resultMap>
 
-	<!-- 字段 -->
-	<sql id="Base_Column_List">
+	<!-- 角色 -->
+	<resultMap id="UpmsRoleResultMap" type="com.zheng.upms.dao.model.UpmsRole">
+		<id column="role_id" jdbcType="INTEGER" property="roleId" />
+		<result column="name" jdbcType="VARCHAR" property="name" />
+		<result column="description" jdbcType="VARCHAR" property="description" />
+		<result column="ctime" jdbcType="BIGINT" property="ctime" />
+		<result column="orders" jdbcType="BIGINT" property="orders" />
+	</resultMap>
+
+	<!-- 权限字段 -->
+	<sql id="UpmsPermission_Column_List">
 		permission_id, system_id, pid, name, type, permission_value, uri, icon, status, ctime, orders
 	</sql>
 
+	<!-- 角色字段 -->
+	<sql id="UpmsRole_Column_List">
+		role_id, name, description, ctime, orders
+	</sql>
+
 	<!-- 根据用户获取所拥有的权限 -->
 	<select id="selectUpmsPermissionByUpmsUserId" parameterType="java.lang.Integer" resultMap="UpmsPermissionResultMap">
 		select
-			<include refid="Base_Column_List" />
+			<include refid="UpmsPermission_Column_List" />
 		from upms_permission up where up.permission_id in (
 			select permission_id from upms_role_permission urp where urp.role_id in (
 				select uur.role_id role_id from upms_user_role uur where uur.user_id=#{upmsUserId,jdbcType=INTEGER}
@@ -35,6 +49,15 @@
 		)
 	</select>
 
+	<!-- 根据用户id获取所属的角色 -->
+	<select id="selectUpmsRoleByUpmsUserId" parameterType="java.lang.Integer" resultMap="UpmsRoleResultMap">
+		select
+			<include refid="UpmsRole_Column_List" />
+		from upms_role ur where ur.role_id in (
+			select uur.role_id from upms_user_role uur where uur.user_id=#{upmsUserId,jdbcType=INTEGER}
+		)
+	</select>
+
 	<!-- 缓存 -->
 	<cache type="org.mybatis.caches.ehcache.LoggingEhcache" />
 

+ 19 - 2
zheng-upms/zheng-upms-rpc-service/src/main/java/com/zheng/upms/rpc/service/impl/UpmsApiServiceImpl.java

@@ -3,6 +3,7 @@ package com.zheng.upms.rpc.service.impl;
 import com.zheng.upms.dao.mapper.UpmsApiMapper;
 import com.zheng.upms.dao.mapper.UpmsUserMapper;
 import com.zheng.upms.dao.model.UpmsPermission;
+import com.zheng.upms.dao.model.UpmsRole;
 import com.zheng.upms.dao.model.UpmsUser;
 import com.zheng.upms.rpc.api.UpmsApiService;
 import org.slf4j.Logger;
@@ -39,12 +40,28 @@ public class UpmsApiServiceImpl implements UpmsApiService {
         // 用户不存在或锁定状态
         UpmsUser upmsUser = upmsUserMapper.selectByPrimaryKey(upmsUserId);
         if (null == upmsUser || 1 == upmsUser.getLocked()) {
-            _log.info("根据用户id获取所拥有的权限,用户不存在或锁定状态:upmsUserId={}", upmsUserId);
+            _log.info("selectUpmsPermissionByUpmsUserId : upmsUserId={}", upmsUserId);
             return null;
         }
-        // 根据用户查询所拥有所有权限
         List<UpmsPermission> upmsPermissions = upmsApiMapper.selectUpmsPermissionByUpmsUserId(upmsUserId);
         return upmsPermissions;
     }
 
+    /**
+     * 根据用户id获取所属的角色
+     * @param upmsUserId
+     * @return
+     */
+    @Override
+    public List<UpmsRole> selectUpmsRoleByUpmsUserId(Integer upmsUserId) {
+        // 用户不存在或锁定状态
+        UpmsUser upmsUser = upmsUserMapper.selectByPrimaryKey(upmsUserId);
+        if (null == upmsUser || 1 == upmsUser.getLocked()) {
+            _log.info("selectUpmsRoleByUpmsUserId : upmsUserId={}", upmsUserId);
+            return null;
+        }
+        List<UpmsRole> upmsRoles = upmsApiMapper.selectUpmsRoleByUpmsUserId(upmsUserId);
+        return upmsRoles;
+    }
+
 }

+ 0 - 3
zheng-upms/zheng-upms-server/src/main/java/com/zheng/upms/server/controller/manage/UpmsSystemController.java

@@ -51,9 +51,6 @@ public class UpmsSystemController extends BaseController {
 		UpmsSystemExample upmsSystemExample = new UpmsSystemExample();
 		upmsSystemExample.setOffset(offset);
 		upmsSystemExample.setLimit(limit);
-		if (!StringUtils.isEmpty(sort) && !StringUtils.isEmpty(order)) {
-			upmsSystemExample.setOrderByClause(sort + " " + order);
-		}
 		List<UpmsSystem> systems = upmsSystemService.selectByExample(upmsSystemExample);
 //		long total = upmsSystemService.countByExample(upmsSystemExample);
 		return systems;

+ 14 - 2
zheng-upms/zheng-upms-server/src/main/java/com/zheng/upms/server/realm/UpmsRealm.java

@@ -1,9 +1,12 @@
 package com.zheng.upms.server.realm;
 
 import com.zheng.common.util.MD5Util;
+import com.zheng.upms.dao.model.UpmsPermission;
 import com.zheng.upms.dao.model.UpmsUser;
 import com.zheng.upms.dao.model.UpmsUserExample;
+import com.zheng.upms.rpc.api.UpmsApiService;
 import com.zheng.upms.rpc.api.UpmsUserService;
+import org.apache.commons.lang.StringUtils;
 import org.apache.shiro.authc.*;
 import org.apache.shiro.authz.AuthorizationInfo;
 import org.apache.shiro.authz.SimpleAuthorizationInfo;
@@ -14,6 +17,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -26,6 +30,9 @@ public class UpmsRealm extends AuthorizingRealm {
     @Autowired
     private UpmsUserService upmsUserService;
 
+    @Autowired
+    private UpmsApiService upmsApiService;
+
     /**
      * 授权:验证权限时调用
      * @param principalCollection
@@ -36,9 +43,14 @@ public class UpmsRealm extends AuthorizingRealm {
         // 当前用户
         UpmsUser upmsUser = (UpmsUser) principalCollection.getPrimaryPrincipal();
 
-        // 全部权限 TODO
+        // 当前用户所有权限
+        List<UpmsPermission> upmsPermissions = upmsApiService.selectUpmsPermissionByUpmsUserId(upmsUser.getUserId());
         Set<String> permissions = new HashSet<>();
-        permissions.add("*:*:*");
+        for (UpmsPermission upmsPermission : upmsPermissions) {
+            if (StringUtils.isNotEmpty(upmsPermission.getPermissionValue())) {
+                permissions.add(upmsPermission.getPermissionValue());
+            }
+        }
 
         SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
         simpleAuthorizationInfo.setStringPermissions(permissions);

+ 26 - 1
zheng-upms/zheng-upms-server/src/main/resources/applicationContext-shiro.xml

@@ -6,12 +6,37 @@
 
     <description>zheng-upms</description>
 
+    <!-- 会话ID生成器 -->
+    <bean id="sessionIdGenerator" class="org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator"/>
+
+    <!-- 会话DAO -->
+    <bean id="sessionDAO" class="org.apache.shiro.session.mgt.eis.MemorySessionDAO">
+        <property name="sessionIdGenerator" ref="sessionIdGenerator"/>
+    </bean>
+
+    <!-- 会话监听器 -->
+    <bean id="sessionListener" class="com.zheng.upms.server.listener.ShiroSessionListener"/>
+
+    <!-- 会话管理器 -->
+    <bean id="sessionManager" class="org.apache.shiro.session.mgt.DefaultSessionManager">
+        <property name="globalSessionTimeout" value="1800000"/>
+        <property name="deleteInvalidSessions" value="true"/>
+        <property name="sessionDAO" ref="sessionDAO"/>
+        <property name="sessionListeners">
+            <list><ref bean="sessionListener"/></list>
+        </property>
+    </bean>
+
     <!-- realm实现,继承自AuthorizingRealm -->
     <bean id="upmsRealm" class="com.zheng.upms.server.realm.UpmsRealm"></bean>
 
     <!-- 安全管理器 -->
     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
-        <property name="realm" ref="upmsRealm"/>
+        <property name="realms">
+            <list><ref bean="upmsRealm"/></list>
+        </property>
+        <!--<property name="sessionManager" ref="sessionManager"/>-->
+        <!--<property name="cacheManager" ref="cacheManager"/>-->
     </bean>
 
     <!-- Shiro的Web过滤器 -->

+ 13 - 0
zheng-upms/zheng-upms-server/src/main/resources/shiro-ehcache.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
+    <diskStore path="java.io.tmpdir/shiro-ehcache"/>
+    <cache name="shiro-activeSessionCache"
+           maxEntriesLocalHeap="10000"
+           overflowToDisk="false"
+           eternal="false"
+           diskPersistent="false"
+           timeToLiveSeconds="0"
+           timeToIdleSeconds="0"
+           statistics="true"/>
+</ehcache>