Oauth2Controller.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package com.xjrsoft.module.system.controller;
  2. import cn.dev33.satoken.config.SaCookieConfig;
  3. import cn.dev33.satoken.context.SaHolder;
  4. import cn.dev33.satoken.context.model.SaCookie;
  5. import cn.dev33.satoken.context.model.SaRequest;
  6. import cn.dev33.satoken.context.model.SaResponse;
  7. import cn.dev33.satoken.oauth2.config.SaOAuth2Config;
  8. import cn.dev33.satoken.oauth2.logic.SaOAuth2Handle;
  9. import cn.dev33.satoken.spring.SpringMVCUtil;
  10. import cn.dev33.satoken.stp.StpLogic;
  11. import cn.dev33.satoken.stp.StpUtil;
  12. import cn.dev33.satoken.util.SaResult;
  13. import cn.hutool.core.bean.BeanUtil;
  14. import cn.hutool.core.util.IdUtil;
  15. import com.xjrsoft.common.annotation.XjrLog;
  16. import com.xjrsoft.common.constant.GlobalConstant;
  17. import com.xjrsoft.common.model.result.R;
  18. import com.xjrsoft.common.model.result.RT;
  19. import com.xjrsoft.common.utils.RedisUtil;
  20. import com.xjrsoft.config.CommonPropertiesConfig;
  21. import com.xjrsoft.module.organization.entity.User;
  22. import com.xjrsoft.module.organization.service.IUserService;
  23. import com.xjrsoft.module.organization.vo.UserVo;
  24. import io.swagger.annotations.Api;
  25. import io.swagger.annotations.ApiOperation;
  26. import lombok.AllArgsConstructor;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.web.bind.annotation.GetMapping;
  29. import org.springframework.web.bind.annotation.RequestMapping;
  30. import org.springframework.web.bind.annotation.RestController;
  31. import org.springframework.web.servlet.ModelAndView;
  32. import javax.servlet.http.Cookie;
  33. import javax.servlet.http.HttpServletRequest;
  34. import javax.servlet.http.HttpServletResponse;
  35. import java.io.IOException;
  36. import java.util.HashMap;
  37. import java.util.Map;
  38. /**
  39. * Oauth2
  40. */
  41. @Api(tags = "Oauth2")
  42. @RestController
  43. @AllArgsConstructor
  44. public class Oauth2Controller {
  45. @Autowired
  46. private CommonPropertiesConfig commonPropertiesConfig;
  47. private final RedisUtil redisUtil;
  48. private final IUserService userService;
  49. @RequestMapping("/oauth2/*")
  50. @ApiOperation(value = "处理所有OAuth相关请求")
  51. public Object request() {
  52. return SaOAuth2Handle.serverRequest();
  53. }
  54. @GetMapping("/oauth2/user/info")
  55. @ApiOperation(value = "获取当前用户信息")
  56. public RT<UserVo> userInfo() {
  57. //获取用户id
  58. Long userId = StpUtil.getLoginIdAsLong();
  59. User user = userService.getById(userId);
  60. if (user == null) {
  61. return RT.error("找不到此用户!");
  62. }
  63. return RT.ok(BeanUtil.toBean(user, UserVo.class));
  64. }
  65. // Sa-OAuth2 定制化配置
  66. @Autowired
  67. public void setSaOAuth2Config(SaOAuth2Config cfg) {
  68. // 配置:未登录时返回的View
  69. cfg.setNotLoginView(() -> {
  70. SaRequest req = SaHolder.getRequest();
  71. Map<String, String> paramMap = req.getParamMap();
  72. StringBuilder param = new StringBuilder();
  73. paramMap.forEach((k, v) -> {
  74. param.append("&").append(k).append("=").append(v);
  75. });
  76. param.deleteCharAt(0);
  77. String callBackUrl = String.format("%s/oauth2/authorize?%s", commonPropertiesConfig.getDomainApi(), param);
  78. String key = GlobalConstant.OAUTH2 + IdUtil.simpleUUID();
  79. redisUtil.set(key, callBackUrl, 86400);
  80. SaResponse res = SaHolder.getResponse();
  81. SaCookie cookie = new SaCookie()
  82. .setName("Oauth2Info")
  83. .setValue(key);
  84. res.addCookie(cookie);
  85. res.redirect(String.format("%s/#/login", commonPropertiesConfig.getDomainWeb()));
  86. return null;
  87. }).
  88. // 配置:确认授权时返回的View
  89. setConfirmView((clientId, scope) -> {
  90. Map<String, Object> map = new HashMap<>();
  91. map.put("clientId", clientId);
  92. map.put("scope", scope);
  93. return new ModelAndView("confirm.html", map);
  94. });
  95. }
  96. }