fanxp 1 năm trước cách đây
mục cha
commit
786c39bc28

+ 1 - 1
Makefile

@@ -2,7 +2,7 @@ merge:
 	git checkout master;git merge dev;git push;git checkout dev;
 
 create-tag:
-	git checkout master;git tag v1.0.9;git push origin --tags;git checkout dev;
+	git checkout master;git tag v1.1.2;git push origin --tags;git checkout dev;
 
 remove-tag:
 	git tag -d v1.0.1;git push origin :refs/tags/v1.0.1;

+ 47 - 36
src/main/java/com/xjrsoft/module/system/controller/Oauth2Controller.java

@@ -11,15 +11,22 @@ import cn.dev33.satoken.spring.SpringMVCUtil;
 import cn.dev33.satoken.stp.StpLogic;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.dev33.satoken.util.SaResult;
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.IdUtil;
 import com.xjrsoft.common.annotation.XjrLog;
 import com.xjrsoft.common.constant.GlobalConstant;
+import com.xjrsoft.common.model.result.R;
+import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.utils.RedisUtil;
 import com.xjrsoft.config.CommonPropertiesConfig;
+import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.service.IUserService;
+import com.xjrsoft.module.organization.vo.UserVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.servlet.ModelAndView;
@@ -44,55 +51,59 @@ public class Oauth2Controller {
 
     private final RedisUtil redisUtil;
 
-    // 处理所有OAuth相关请求
+    private final IUserService userService;
+
     @RequestMapping("/oauth2/*")
-    @ApiOperation(value = "oauth2", notes = "处理所有OAuth相关请求")
-    @XjrLog(value = "处理所有OAuth相关请求")
+    @ApiOperation(value = "处理所有OAuth相关请求")
     public Object request() {
         return SaOAuth2Handle.serverRequest();
     }
 
+    @GetMapping("/oauth2/user/info")
+    @ApiOperation(value = "获取当前用户信息")
+    public RT<UserVo> userInfo() {
+        //获取用户id
+        Long userId =  StpUtil.getLoginIdAsLong();
+        User user = userService.getById(userId);
+        if (user == null) {
+            return RT.error("找不到此用户!");
+        }
+        return RT.ok(BeanUtil.toBean(user, UserVo.class));
+    }
+
     // Sa-OAuth2 定制化配置
     @Autowired
     public void setSaOAuth2Config(SaOAuth2Config cfg) {
         // 配置:未登录时返回的View
         cfg.setNotLoginView(() -> {
-                    SaRequest req = SaHolder.getRequest();
-                    Map<String, String> paramMap = req.getParamMap();
-                    StringBuilder param = new StringBuilder();
-                    paramMap.forEach((k, v) -> {
-                        param.append("&").append(k).append("=").append(v);
-                    });
-                    param.deleteCharAt(0);
-                    String callBackUrl = String.format("%s/oauth2/authorize?%s", commonPropertiesConfig.getDomainApi(), param);
+                SaRequest req = SaHolder.getRequest();
+                Map<String, String> paramMap = req.getParamMap();
+                StringBuilder param = new StringBuilder();
+                paramMap.forEach((k, v) -> {
+                    param.append("&").append(k).append("=").append(v);
+                });
+                param.deleteCharAt(0);
+                String callBackUrl = String.format("%s/oauth2/authorize?%s", commonPropertiesConfig.getDomainApi(), param);
 
-                    String key = GlobalConstant.OAUTH2 + IdUtil.simpleUUID();
-                    redisUtil.set(key, callBackUrl, 86400);
+                String key = GlobalConstant.OAUTH2 + IdUtil.simpleUUID();
+                redisUtil.set(key, callBackUrl, 86400);
 
-                    SaResponse res = SaHolder.getResponse();
-                    SaCookie cookie = new SaCookie()
-                            .setName("Oauth2Info")
-                            .setValue(key);
+                SaResponse res = SaHolder.getResponse();
+                SaCookie cookie = new SaCookie()
+                        .setName("Oauth2Info")
+                        .setValue(key);
 
-                    res.addCookie(cookie);
+                res.addCookie(cookie);
 
-                    res.redirect(String.format("%s/#/login", commonPropertiesConfig.getDomainWeb()));
-                    return null;
-                }).
-                // 配置:登录处理函数
-                setDoLoginHandle((name, pwd) -> {
-                    if ("sa".equals(name) && "123456".equals(pwd)) {
-                        StpUtil.login(10001);
-                        return SaResult.ok();
-                    }
-                    return SaResult.error("账号名或密码错误");
-                }).
-                // 配置:确认授权时返回的View
-                setConfirmView((clientId, scope) -> {
-                    Map<String, Object> map = new HashMap<>();
-                    map.put("clientId", clientId);
-                    map.put("scope", scope);
-                    return new ModelAndView("confirm.html", map);
-                });
+                res.redirect(String.format("%s/#/login", commonPropertiesConfig.getDomainWeb()));
+                return null;
+            }).
+            // 配置:确认授权时返回的View
+            setConfirmView((clientId, scope) -> {
+                Map<String, Object> map = new HashMap<>();
+                map.put("clientId", clientId);
+                map.put("scope", scope);
+                return new ModelAndView("confirm.html", map);
+        });
     }
 }

+ 111 - 0
src/main/java/com/xjrsoft/module/system/entity/OauthClientDetails.java

@@ -0,0 +1,111 @@
+package com.xjrsoft.module.system.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.github.yulichang.annotation.EntityMapping;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+/**
+* @title: oauth用户列表
+* @Author fanxp
+* @Date: 2023-11-08
+* @Version 1.0
+*/
+@Data
+@TableName("oauth_client_details")
+@ApiModel(value = "oauth用户列表对象", description = "oauth用户列表")
+public class OauthClientDetails implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    @TableId
+    private Long id;
+    /**
+    * 应用标识
+    */
+    @ApiModelProperty("应用标识")
+    private String clientId;
+    /**
+    * 应用名称
+    */
+    @ApiModelProperty("应用名称")
+    private String clientName;
+    /**
+    * 应用密钥
+    */
+    @ApiModelProperty("应用密钥")
+    private String clientSecret;
+    /**
+    * 应用允许授权的所有URL, 多个用逗号隔开
+    */
+    @ApiModelProperty("应用允许授权的所有URL, 多个用逗号隔开")
+    private String allowUrl;
+    /**
+    * 应用签约的所有权限, 多个用逗号隔开
+    */
+    @ApiModelProperty("应用签约的所有权限, 多个用逗号隔开")
+    private String scope;
+    /**
+    * 令牌时效(s)
+    */
+    @ApiModelProperty("令牌时效(s)")
+    private Long accessTokenTimeout;
+    /**
+    * 刷新时效(s)
+    */
+    @ApiModelProperty("刷新时效(s)")
+    private Long refreshTokenValiditySeconds;
+    /**
+    * 授权模式
+    */
+    @ApiModelProperty("授权模式")
+    private String authorizedGrantTypes;
+    /**
+    * 状态 1=启用 2=禁用
+    */
+    @ApiModelProperty("状态 1=启用 2=禁用")
+    private Integer status;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 修改时间
+    */
+    @ApiModelProperty("修改时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ApiModelProperty("删除标记")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ApiModelProperty("有效标志")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+
+
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/system/mapper/OauthClientDetailsMapper.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.system.entity.OauthClientDetails;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: oauth用户列表
+* @Author fanxp
+* @Date: 2023-11-08
+* @Version 1.0
+*/
+@Mapper
+public interface OauthClientDetailsMapper extends BaseMapper<OauthClientDetails> {
+
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/system/service/IOauthClientDetailsService.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.system.entity.OauthClientDetails;
+import lombok.Data;
+import java.util.List;
+
+/**
+* @title: oauth用户列表
+* @Author fanxp
+* @Date: 2023-11-08
+* @Version 1.0
+*/
+
+public interface IOauthClientDetailsService extends IService<OauthClientDetails> {
+}

+ 25 - 0
src/main/java/com/xjrsoft/module/system/service/impl/OauthClientDetailsServiceImpl.java

@@ -0,0 +1,25 @@
+package com.xjrsoft.module.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.system.entity.OauthClientDetails;
+import com.xjrsoft.module.system.mapper.OauthClientDetailsMapper;
+import com.xjrsoft.module.system.service.IOauthClientDetailsService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+
+/**
+* @title: oauth用户列表
+* @Author fanxp
+* @Date: 2023-11-08
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class OauthClientDetailsServiceImpl extends ServiceImpl<OauthClientDetailsMapper, OauthClientDetails> implements IOauthClientDetailsService {
+}

+ 23 - 9
src/main/java/com/xjrsoft/module/system/service/impl/SaOAuth2TemplateImpl.java

@@ -3,6 +3,13 @@ package com.xjrsoft.module.system.service.impl;
 import cn.dev33.satoken.oauth2.logic.SaOAuth2Template;
 import cn.dev33.satoken.oauth2.model.SaClientModel;
 import cn.dev33.satoken.stp.StpUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.xjrsoft.common.exception.MyException;
+import com.xjrsoft.module.system.entity.Datasource;
+import com.xjrsoft.module.system.entity.OauthClientDetails;
+import com.xjrsoft.module.system.service.IOauthClientDetailsService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 /**
@@ -10,19 +17,26 @@ import org.springframework.stereotype.Component;
  */
 @Component
 public class SaOAuth2TemplateImpl extends SaOAuth2Template {
+
+    @Autowired
+    private IOauthClientDetailsService oauthClientDetailsService;
+
     // 根据 id 获取 Client 信息
     @Override
     public SaClientModel getClientModel(String clientId) {
-        // 此为模拟数据,真实环境需要从数据库查询
-        if("1001".equals(clientId)) {
-            return new SaClientModel()
-                    .setClientId("1001")
-                    .setClientSecret("aaaa-bbbb-cccc-dddd-eeee")
-                    .setAllowUrl("https://sa-token.cc")
-                    .setContractScope("userinfo")
-                    .setIsAutoMode(true);
+        OauthClientDetails oauthClientDetails = oauthClientDetailsService.getOne(Wrappers.<OauthClientDetails>query().lambda()
+                .eq(OauthClientDetails::getClientId, clientId)
+                .eq(OauthClientDetails::getStatus, 1));
+
+        if (oauthClientDetails == null) {
+            throw new MyException("找不到此数据");
         }
-        return null;
+        return new SaClientModel()
+                .setClientId(oauthClientDetails.getClientId())
+                .setClientSecret(oauthClientDetails.getClientSecret())
+                .setAllowUrl(oauthClientDetails.getAllowUrl())
+                .setContractScope(oauthClientDetails.getScope())
+                .setIsAutoMode(true);
     }
 
     // 根据ClientId 和 LoginId 获取openid

+ 4 - 4
src/main/resources/application-dev.yml

@@ -61,10 +61,10 @@ xjrsoft:
     druid-account: admin # druid 监控账户
     druid-password: admin # druid 监控密码
     default-password: "000000" #默认密码(用户重置密码后为该密码)
-    domain-api: https://test.tl.web.yingcaibx.com/api #api域名地址
-    domain-web: https://test.tl.web.yingcaibx.com #web域名地址
-#    domain-api: http://127.0.0.1:9000/api #api域名地址
-#    domain-web: http://127.0.0.1:9000 #web域名地址
+#    domain-api: https://test.tl.web.yingcaibx.com/api #api域名地址
+#    domain-web: https://test.tl.web.yingcaibx.com #web域名地址
+    domain-api: http://127.0.0.1:9000/api #api域名地址
+    domain-web: http://127.0.0.1:9000 #web域名地址
     white-list:
       - 192.168.0.139
     exclude-urls:

+ 27 - 0
src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

@@ -349,6 +349,33 @@ public class FreeMarkerGeneratorTest {
         params.setDs(ds);
 
 
+        IApiGeneratorService apiGeneratorService = new ApiGeneratorServiceImpl();
+
+        apiGeneratorService.generateCodes(params);
+    }
+
+    @Test
+    public void gcOauthFunction() throws IOException {
+        List<TableConfig> tableConfigs = new ArrayList<>();
+        TableConfig mainTable = new TableConfig();
+        mainTable.setTableName("oauth_client_details");
+        mainTable.setIsMain(true);
+        mainTable.setPkField(GlobalConstant.DEFAULT_PK);
+        mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);
+
+        tableConfigs.add(mainTable);
+
+        ApiGenerateCodesDto params = new ApiGenerateCodesDto();
+        params.setAuthor("fanxp");
+        params.setPackageName("system");
+        params.setTableConfigs(tableConfigs);
+        params.setPage(false);
+        params.setImport(false);
+        params.setExport(false);
+        params.setOutMainDir(true);
+        params.setDs(ds);
+
+
         IApiGeneratorService apiGeneratorService = new ApiGeneratorServiceImpl();
 
         apiGeneratorService.generateCodes(params);