浏览代码

网关服务

zhoutg 6 年之前
父节点
当前提交
7737878c72

+ 4 - 0
gateway-service/src/main/java/com/diagbot/client/UserServiceClient.java

@@ -18,6 +18,10 @@ public interface UserServiceClient {
 
     @PostMapping("/user/login")
     RespDTO<User> login(@RequestParam("username") String username , @RequestParam("password") String password);
+
+    @PostMapping("/user/getPermission")
+    RespDTO getPermission(@RequestParam("appkey") String appkey , @RequestParam("secret") String secret);
+
 }
 
 

+ 6 - 0
gateway-service/src/main/java/com/diagbot/client/hystrix/UserServiceHystrix.java

@@ -19,4 +19,10 @@ public class UserServiceHystrix implements UserServiceClient {
         log.error("【hystrix】调用{}异常","login");
         return null;
     }
+
+    @Override
+    public RespDTO getPermission(String appkey, String secret) {
+        log.error("【hystrix】调用{}异常","getPermission");
+        return null;
+    }
 }

+ 11 - 4
gateway-service/src/main/java/com/diagbot/filter/GlobalGatewayFilter.java

@@ -2,7 +2,6 @@ package com.diagbot.filter;
 
 import com.diagbot.client.UserServiceClient;
 import com.diagbot.dto.RespDTO;
-import com.diagbot.entity.User;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
@@ -14,6 +13,7 @@ import org.springframework.web.server.ServerWebExchange;
 import reactor.core.publisher.Mono;
 
 import java.net.URI;
+import java.security.Permission;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
 
@@ -25,15 +25,22 @@ import java.util.LinkedHashSet;
 @Configuration
 @Slf4j
 public class GlobalGatewayFilter implements GlobalFilter {
+
     private static final String GATE_WAY_PREFIX = "/api";
 
     @Autowired
-    private UserServiceClient userServiceClient;
+    UserServiceClient userServiceClient;
+
+
     @Override
     public Mono<Void> filter(ServerWebExchange serverWebExchange, GatewayFilterChain gatewayFilterChain) {
         log.info("check token and url permission....");
         LinkedHashSet requiredAttribute = serverWebExchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR);
         ServerHttpRequest request = serverWebExchange.getRequest();
+        String appkey = request.getHeaders().getFirst("appkey");
+        String secret = request.getHeaders().getFirst("secret");
+        //获取appkey,secret对应的
+        RespDTO<Permission> res = userServiceClient.getPermission(appkey, secret);
         String requestUri = request.getPath().pathWithinApplication().value();
         String serviceName = "";
         if (requiredAttribute != null) {
@@ -46,14 +53,14 @@ public class GlobalGatewayFilter implements GlobalFilter {
                 }
             }
         }
-        RespDTO<User> userRespDTO =  userServiceClient.login("admin","a123456");
         log.info("APIURL:{}", requestUri);
         log.info("SERVICENAME:{}", serviceName);
         //
-
         ServerHttpRequest.Builder builder = serverWebExchange.getRequest().mutate();
         builder.header("Authorization","Authorization Bearer token");
         gatewayFilterChain.filter(serverWebExchange.mutate().request(builder.build()).build());
+
+
         return gatewayFilterChain.filter(serverWebExchange.mutate().request(builder.build()).build());
     }
 }

+ 3 - 3
uaa-service/src/main/resources/mapper/PermissionMapper.xml

@@ -18,11 +18,11 @@
     
     <select id="getByUserId" parameterType="java.lang.Long" resultType="com.diagbot.entity.Permission">
       select p.*
-		from sys_user u
+        from sys_user u
         LEFT JOIN sys_user_role sru on u.id= sru.user_id and sru.is_deleted = 'N'
         LEFT JOIN sys_role_menu srp on srp.role_id=sru.role_id and srp.is_deleted = 'N'
         LEFT JOIN sys_menu_permission mp on mp.menu_id =srp.menu_id and mp.is_deleted = 'N'
-				LEFT JOIN sys_permission p on p.id =mp.permission_id and p.is_deleted = 'N'
+                LEFT JOIN sys_permission p on p.id =mp.permission_id and p.is_deleted = 'N'
         where u.id= #{userId} and u.is_deleted = 'N'
- </select>
+     </select>
 </mapper>

+ 1 - 0
user-service/src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -33,6 +33,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/userver/verifySmsVerification").permitAll()
                 .antMatchers("/user/resetPassword").permitAll()
                 .antMatchers("/userInfo/getUserInfoPag").permitAll()
+                .antMatchers("/user/getPermission").permitAll()
                 .antMatchers("/**").authenticated();
 //        .antMatchers("/**").permitAll();
     }

+ 1 - 0
user-service/src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -47,6 +47,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/userver/getSmsWithResetPassword", request)
                 || matchers("/userver/verifySmsVerification", request)
                 || matchers("/userInfo/getUserInfoPag", request)
+                || matchers("/user/getPermission", request)
 
                 || matchers("/", request)){
                     return;

+ 84 - 0
user-service/src/main/java/com/diagbot/entity/Permission.java

@@ -0,0 +1,84 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 资源表
+ * @Author: ztg
+ * @Date: 2018/9/17 19:50
+ */
+@TableName("sys_permission")
+@Getter
+@Setter
+public class Permission implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 资源名称
+     */
+    private String name;
+
+    /**
+     * 资源url
+     */
+    private String permissionUrl;
+
+
+    /**
+     * 资源允许的请求方式
+     */
+    private String method;
+
+    /**
+     * 资源描述
+     */
+    private String descritpion;
+    
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+
+
+}

+ 41 - 0
user-service/src/main/java/com/diagbot/facade/PermissionFacade.java

@@ -0,0 +1,41 @@
+package com.diagbot.facade;
+
+import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.Permission;
+import com.diagbot.entity.User;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.service.impl.PermissionServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.factory.PasswordEncoderFactories;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description: 资源
+ * @Author: ztg
+ * @Date: 2018/9/17 18:32
+ */
+@Component
+public class PermissionFacade extends PermissionServiceImpl {
+
+    @Autowired
+    UserFacade userFacade;
+
+    public RespDTO getPermission(String appkey, String secret) {
+        User user = userFacade.findByName(appkey);
+        if(null == user){
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "未找到对应的appkey【" + appkey + "】" );
+        }
+        PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
+        if(!passwordEncoder.matches(secret, user.getPassword())){
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "appkey 或 secret 错误!【" + appkey + "," + secret + "】");
+        }
+        List<Permission> permissions = this.getPermissionByUserId(user.getId());
+        return RespDTO.onSuc(permissions);
+    }
+   
+
+}

+ 3 - 0
user-service/src/main/java/com/diagbot/facade/UserFacade.java

@@ -58,6 +58,8 @@ public class UserFacade extends UserServiceImpl {
     MenuFacade menuFacade;
     @Autowired
     UserAuthenticationFacade userAuthenticationFacade;
+    @Autowired
+    PermissionFacade permissionFacade;
 
 
     public User createUser(UserSaveVO userSaveVO){
@@ -172,6 +174,7 @@ public class UserFacade extends UserServiceImpl {
         return RespDTO.onSuc(loginDTO);
     }
 
+
     /**
      * @Description: 递归获取菜单结构
      * @Author: ztg

+ 22 - 0
user-service/src/main/java/com/diagbot/mapper/PermissionMapper.java

@@ -0,0 +1,22 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.Permission;
+
+import java.util.List;
+
+/**
+ * @Description: 资源mapper
+ * @Author: ztg
+ * @Date: 2018/9/14 13:42
+ */
+public interface PermissionMapper extends BaseMapper<Permission> {
+
+    /**
+     * @Description: 根据用户获取资源信息
+     * @Author: ztg
+     * @Date: 2018/9/17 20:19
+     */
+    public List<Permission> getByUserId(Long userId);
+
+}

+ 21 - 0
user-service/src/main/java/com/diagbot/service/PermissionService.java

@@ -0,0 +1,21 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.Permission;
+
+import java.util.List;
+
+/**
+ * @Description: 资源Service
+ * @Author: ztg
+ * @Date: 2018/9/17 15:40
+ */
+public interface PermissionService extends IService<Permission> {
+
+    /**
+     * @Description: 根据用户获取资源信息
+     * @Author: ztg
+     * @Date: 2018/9/17 20:19
+     */
+    public List<Permission> getPermissionByUserId(Long userId);
+}

+ 29 - 0
user-service/src/main/java/com/diagbot/service/impl/PermissionServiceImpl.java

@@ -0,0 +1,29 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.entity.Permission;
+import com.diagbot.mapper.PermissionMapper;
+import com.diagbot.service.PermissionService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description: 资源Service实现类
+ * @Author: ztg
+ * @Date: 2018/9/13 16:56
+ */
+@Service
+@Slf4j
+public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permission> implements PermissionService {
+
+    @Autowired
+    PermissionMapper permissionMapper;
+
+    @Override
+    public List<Permission> getPermissionByUserId(Long userId) {
+        return permissionMapper.getByUserId(userId);
+    }
+}

+ 13 - 0
user-service/src/main/java/com/diagbot/web/UserController.java

@@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.LoginDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.Permission;
 import com.diagbot.entity.User;
+import com.diagbot.facade.PermissionFacade;
 import com.diagbot.facade.UserFacade;
 import com.diagbot.vo.UserSaveVO;
 import io.swagger.annotations.Api;
@@ -34,6 +36,8 @@ public class UserController {
 
     @Autowired
     private UserFacade userFacade;
+    @Autowired
+    private PermissionFacade permissionFacade;
 
     @ApiOperation(value = "注册",
         notes = "username:用户名,必填<br>" +
@@ -73,6 +77,15 @@ public class UserController {
     }
 
 
+    @ApiOperation(value = "获取资源信息",
+            notes = "appkey:用户名,必填<br>" +
+                    "secret:密码, 必填<br> ")
+    @PostMapping("/getPermission")
+    public RespDTO<Permission> getPermission(@RequestParam String appkey, @RequestParam String secret){
+        return  permissionFacade.getPermission(appkey, secret);
+    }
+
+
     @ApiOperation(value = "根据用户名获取用户", notes = "根据用户名获取用户")
     @PostMapping("/getByUsername")
     @SysLogger("getByUsername")

+ 36 - 0
user-service/src/main/resources/mapper/PermissionMapper.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.PermissionMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.Permission">
+        <id column="id" property="id" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="name" property="name" />
+        <result column="permission_url" property="permissionUrl" />
+        <result column="method" property="method" />
+        <result column="descritpion" property="descritpion" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+    <select id="getByRole" resultMap="BaseResultMap">
+        select a.* from sys_menu a, sys_role_menu b, sys_user_role c
+        where a.id = b.menu_id and b.role_id and b.role_id = c.role_id and c.user_id = #{userId}
+        and a.is_deleted = 'N' and b.is_deleted = 'N' and c.is_deleted = 'N'
+        ORDER BY a.order_no
+    </select>
+
+
+    <select id="getByUserId" parameterType="java.lang.Long" resultType="com.diagbot.entity.Permission">
+        select p.*
+        from sys_user u
+        LEFT JOIN sys_user_role sru on u.id= sru.user_id and sru.is_deleted = 'N'
+        LEFT JOIN sys_role_menu srp on srp.role_id=sru.role_id and srp.is_deleted = 'N'
+        LEFT JOIN sys_menu_permission mp on mp.menu_id =srp.menu_id and mp.is_deleted = 'N'
+        LEFT JOIN sys_permission p on p.id =mp.permission_id and p.is_deleted = 'N'
+        where u.id= #{userId} and u.is_deleted = 'N'
+    </select>
+</mapper>