Oauth2Controller.java 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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.util.IdUtil;
  14. import com.xjrsoft.common.annotation.XjrLog;
  15. import com.xjrsoft.common.constant.GlobalConstant;
  16. import com.xjrsoft.common.utils.RedisUtil;
  17. import com.xjrsoft.config.CommonPropertiesConfig;
  18. import io.swagger.annotations.Api;
  19. import io.swagger.annotations.ApiOperation;
  20. import lombok.AllArgsConstructor;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.web.bind.annotation.RequestMapping;
  23. import org.springframework.web.bind.annotation.RestController;
  24. import org.springframework.web.servlet.ModelAndView;
  25. import javax.servlet.http.Cookie;
  26. import javax.servlet.http.HttpServletRequest;
  27. import javax.servlet.http.HttpServletResponse;
  28. import java.io.IOException;
  29. import java.util.HashMap;
  30. import java.util.Map;
  31. /**
  32. * Oauth2
  33. */
  34. @Api(tags = "Oauth2")
  35. @RestController
  36. @AllArgsConstructor
  37. public class Oauth2Controller {
  38. @Autowired
  39. private CommonPropertiesConfig commonPropertiesConfig;
  40. private final RedisUtil redisUtil;
  41. // 处理所有OAuth相关请求
  42. @RequestMapping("/oauth2/*")
  43. @ApiOperation(value = "oauth2", notes = "处理所有OAuth相关请求")
  44. @XjrLog(value = "处理所有OAuth相关请求")
  45. public Object request() {
  46. return SaOAuth2Handle.serverRequest();
  47. }
  48. // Sa-OAuth2 定制化配置
  49. @Autowired
  50. public void setSaOAuth2Config(SaOAuth2Config cfg) {
  51. // 配置:未登录时返回的View
  52. cfg.setNotLoginView(() -> {
  53. SaRequest req = SaHolder.getRequest();
  54. Map<String, String> paramMap = req.getParamMap();
  55. StringBuilder param = new StringBuilder();
  56. paramMap.forEach((k, v) -> {
  57. param.append("&").append(k).append("=").append(v);
  58. });
  59. param.deleteCharAt(0);
  60. String callBackUrl = String.format("%s?%s", commonPropertiesConfig.getDomainApi(), param);
  61. String key = GlobalConstant.OAUTH2 + IdUtil.simpleUUID();
  62. redisUtil.set(key, callBackUrl, 86400);
  63. SaResponse res = SaHolder.getResponse();
  64. SaCookie cookie = new SaCookie()
  65. .setName("Oauth2Info")
  66. .setValue(key);
  67. res.addCookie(cookie);
  68. res.redirect(String.format("%s/#/login", commonPropertiesConfig.getDomainWeb()));
  69. return null;
  70. }).
  71. // 配置:登录处理函数
  72. setDoLoginHandle((name, pwd) -> {
  73. if ("sa".equals(name) && "123456".equals(pwd)) {
  74. StpUtil.login(10001);
  75. return SaResult.ok();
  76. }
  77. return SaResult.error("账号名或密码错误");
  78. }).
  79. // 配置:确认授权时返回的View
  80. setConfirmView((clientId, scope) -> {
  81. Map<String, Object> map = new HashMap<>();
  82. map.put("clientId", clientId);
  83. map.put("scope", scope);
  84. return new ModelAndView("confirm.html", map);
  85. });
  86. }
  87. }