Jelajahi Sumber

添加RefreshScope 注解

pans 5 bulan lalu
induk
melakukan
3f4f24a9db

+ 4 - 1
snowy-modules/snowy-web-app/src/main/java/vip/xiaonuo/web/core/config/GlobalConfigure.java

@@ -194,7 +194,10 @@ public class GlobalConfigure implements WebMvcConfigurer {
             "/disk/CollegeUser/add",
             "/disk/CollegeOrg/add",
             "/disk/CollegePosition/add",
-            "/disk/CollegeUser/getUser"
+            "/disk/CollegeUser/getUser",
+            "/disk/courseauditrecord/loginJump",
+            "/js/**",
+            "/disk/CollegeUser/getToken"
     };
 
     /**

+ 14 - 0
snowy-modules/snowy-web-app/src/main/java/vip/xiaonuo/web/core/config/WebConfig.java

@@ -0,0 +1,14 @@
+package vip.xiaonuo.web.core.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler("/js/**").addResourceLocations("classpath:/js/");
+    }
+}

+ 2 - 2
snowy-modules/snowy-web-app/src/main/resources/bootstrap.yml

@@ -7,7 +7,7 @@ spring:
     nacos:
       config:
         server-addr: ${REGISTER_HOST:192.168.1.245}:${REGISTER_PORT:18848}
-        namespace: ${NAMESPACE_ID:snowy-cloud-2x-ent-dev}
+        namespace: ${NAMESPACE_ID:pans}
         group: ${spring.profiles.active}
         prefix: ${spring.application.name}
         file-extension: yaml
@@ -15,7 +15,7 @@ spring:
         password: ${REGISTER_PASSWORD:nacos}
       discovery:
         server-addr: ${spring.cloud.nacos.config.server-addr}
-        namespace: ${NAMESPACE_ID:snowy-cloud-2x-ent-dev}
+        namespace: ${NAMESPACE_ID:pans}
         group: ${spring.profiles.active}
         username: ${spring.cloud.nacos.config.username}
         password: ${spring.cloud.nacos.config.password}

File diff ditekan karena terlalu besar
+ 1 - 0
snowy-modules/snowy-web-app/src/main/resources/js/axios.min.js


+ 145 - 0
snowy-modules/snowy-web-app/src/main/resources/templates/loginJump.html

@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+	<meta charset="UTF-8">
+	<meta name="viewport" content="width=device-width, initial-scale=1.0">
+	<title>教育平台登录</title>
+
+	<style>
+		body {
+			font-family: Arial, sans-serif;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			height: 100vh;
+			margin: 0;
+			background-color: #f0f2f5;
+		}
+
+		.login-container {
+			text-align: center;
+			background: white;
+			padding: 2rem;
+			border-radius: 8px;
+			box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+		}
+
+		.login-btn {
+			display: block;
+			width: 200px;
+			padding: 12px;
+			margin: 20px auto;
+			border: none;
+			border-radius: 4px;
+			color: white;
+			font-size: 16px;
+			cursor: pointer;
+			transition: background-color 0.3s;
+		}
+
+		.student-btn {
+			background-color: #1890ff;
+		}
+
+		.teacher-btn {
+			background-color: #52c41a;
+		}
+
+		.login-btn:hover {
+			opacity: 0.9;
+		}
+	</style>
+</head>
+
+<body>
+<input type="hidden" th:value="${teacherUrl}" name="id"  id="teacherUrl" >
+<input type="hidden" th:value="${studentUrl}" name="id"  id="studentUrl" >
+<script src="/api/webapp/js/axios.min.js" type="text/javascript" th:src="@{/api/webapp/js/axios.min.js}"></script>
+<script>
+
+	let baseUrl ="http://"+window.location.host;
+	let teacherUrl = document.getElementById('teacherUrl').value;
+	let studentUrl = document.getElementById('studentUrl').value;
+    console.log(teacherUrl)
+	console.log(studentUrl)
+	// 创建axios实例,参考request.js中的配置
+	const service = axios.create({
+		baseURL: '/api',
+		timeout: 5000
+	});
+
+	// 登录函数
+	const login = async () => {
+		const urlParams = new URLSearchParams(window.location.search);
+		let code = urlParams.get('code');
+		let type = urlParams.get('type');
+		let id = urlParams.get('id');
+		if (code == undefined || type == undefined) {
+			alert('数据参数不对');
+			return
+		}
+		if (type == 1 && id == undefined) {
+			alert('数据参数不对 没有id');
+			return
+		}
+		console.log('什么数值呢', code)
+		// 这里需要替换为实际的登录接口URL
+		const loginUrl = baseUrl+'/api/webapp/disk/CollegeUser/getUser';
+
+		let res = await service.get(loginUrl, {
+			params: {
+				code
+			},
+			headers: {
+				'account': 'admin',
+			}
+		})
+		console.log('登录状况:', res.data);
+		if (res.data.code === 200) {
+
+
+			let url =  baseUrl+'/api/webapp/auth/b/getLoginUser'
+			let ress = await service.get(url, {
+				headers: {
+					'token': res.data.data,
+				}
+			})
+			console.log('获取人员信息:', ress);
+			if(ress.data.code == 200 && ress.data.data.eduIdentity == 1){
+				//去教师端
+				// 构建带参数的URL
+				const params = new URLSearchParams({
+					userId: ress.data.data.id,
+					type,
+					id
+				});
+				const redirectUrl = `${teacherUrl}/jump?${params.toString()}`;
+				window.location.href = redirectUrl;
+			}else if(ress.data.code == 200 && ress.data.data.eduIdentity == 2){
+
+				//去学生端
+				// 构建带参数的URL
+				const params = new URLSearchParams({
+					userId: ress.data.data.id,
+					type,
+					id
+				});
+				const redirectUrl = `${studentUrl}${type==1?'/student/resourceDetails':'/student/resourceCenter'}?${params.toString()}`;
+				window.location.href = redirectUrl;
+			}
+
+		}
+	}
+
+	// 在<script>标签内添加
+	window.onload = function() {
+		console.log('页面加载完成');
+		login()
+		// 在这里可以执行初始化操作
+		// 比如自动登录等
+		// login(); // 如果需要自动执行登录
+	};
+
+</script>
+</body>
+</html>

+ 25 - 1
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/CollegeUserController.java

@@ -14,6 +14,7 @@ package vip.xiaonuo.disk.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
@@ -176,7 +177,7 @@ public class CollegeUserController {
         try {
             if(rs.getCode().equals(200)){
                 CommonResult<String> result=collegeUserService.getUser(httpServletRequest);
-                return CommonResult.ok(result.getMsg());
+                return CommonResult.data(result.getMsg());
             }
         } catch (Exception e) {
             log.info("根据code获取用户信息失败,失败原因:{}", e);
@@ -184,4 +185,27 @@ public class CollegeUserController {
         }
         return CommonResult.error(rs.getMsg());
     }
+
+    /**
+     * 根据用户id获取token
+     * @param httpServletRequest
+     * @return
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("根据用户id获取token")
+    @GetMapping("/disk/CollegeUser/getToken")
+    public CommonResult<String> getToken(HttpServletRequest httpServletRequest){
+        try {
+            String userId=httpServletRequest.getParameter("userId");
+            if(ObjectUtil.isEmpty(userId)){
+                return CommonResult.error("用户id为空");
+            }
+            String  token = collegeUserService.getAuthToken(userId);
+            return CommonResult.data(token);
+        } catch (Exception e) {
+            return CommonResult.error("根据用户id获取token为空======================》"+e.getMessage());
+        }
+    }
+
+
 }

+ 31 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/ResourceRecordController.java

@@ -98,6 +98,17 @@ public class ResourceRecordController {
 
     @Value("${resource.sharelink.tea}")
     private String teaResourceShareLink;
+
+
+    @Value("${teacher.url}")
+    private String teacherUrl;
+
+    @Value("${student.url}")
+    private String studentUrl;
+
+    @Value("${base.url}")
+    private String baseUrl;
+
     @Resource
     private AuthUtil authUtil;
     /**
@@ -708,4 +719,24 @@ public class ResourceRecordController {
         return mav; // 返回ModelAndView对象
     }
 
+
+
+
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("门户端-跳转公共页面")
+    @GetMapping("/disk/courseauditrecord/loginJump")
+    public ModelAndView loginJump(HttpServletRequest req,Model model) { // 返回ModelAndView
+        String code = req.getParameter("code");
+        String type = req.getParameter("type");
+        ModelAndView mav = new ModelAndView();
+        mav.setViewName("loginJump"); // 设置视图名称
+        model.addAttribute("baseUrl", baseUrl); // 添加数据
+        model.addAttribute("teacherUrl", teacherUrl); // 添加数据
+        model.addAttribute("studentUrl", studentUrl);
+        model.addAttribute("code", code); // 添加数据
+        model.addAttribute("type", type);
+
+        return mav;
+    }
+
 }

+ 2 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/CollegeUserService.java

@@ -82,4 +82,6 @@ public interface CollegeUserService extends IService<CollegeUser> {
     CollegeUser queryEntity(String id);
 
     CommonResult<String> getUser(HttpServletRequest httpServletRequest);
+
+    String getAuthToken(String userId);
 }

+ 25 - 2
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/impl/CollegeUserServiceImpl.java

@@ -70,7 +70,9 @@ import java.util.stream.Collectors;
 @RefreshScope
 @Service
 public class CollegeUserServiceImpl extends ServiceImpl<CollegeUserMapper, CollegeUser> implements CollegeUserService {
-
+    private static final String AUTH_TOKEN_PREFIX = "authToken:";
+    @Value("${sa-token.timeout}")
+    private Long AUTH_TOKEN_EXPIRE_SECONDS; // 30天
 
     private static final String LOGIN_ERROR_TIMES_KEY_PREFIX = "login-error-times:";
     @Value("${sso.url}")
@@ -256,7 +258,15 @@ public class CollegeUserServiceImpl extends ServiceImpl<CollegeUserMapper, Colle
 //
 //        JSONObject user=userRs.getJSONObject("data");
 //        String account=user.getString("iamUserCode");
-        String account="ww";
+        String account="";
+       if("teacher".equals(code)){
+            account="ww";
+       }
+
+        if("student".equals(code)){
+            account="zhiduoxing";
+        }
+
         SaBaseLoginUser saBaseLoginUser = loginUserApi.getUserByAccount(account);
 
         if(ObjectUtil.isEmpty(saBaseLoginUser)){
@@ -299,10 +309,23 @@ public class CollegeUserServiceImpl extends ServiceImpl<CollegeUserMapper, Colle
         saBaseLoginUser.setRoleCodeList(roleCodeList);
         // 缓存用户信息,此处使用TokenSession为了指定时间内无操作则自动下线
         StpUtil.getTokenSession().set("loginUser", saBaseLoginUser);
+        String tokenKey = AUTH_TOKEN_PREFIX + saBaseLoginUser.getId();
+        String tokenValue = StpUtil.getTokenInfo().tokenValue;
+        commonCacheOperator.put(tokenKey, tokenValue, AUTH_TOKEN_EXPIRE_SECONDS);
         // 返回token
         return StpUtil.getTokenInfo().tokenValue;
     }
+    // 获取令牌
+    public String getAuthToken(String userId) {
+        String tokenKey = AUTH_TOKEN_PREFIX + userId;
+        return (String) commonCacheOperator.get(tokenKey);
+    }
 
+    // 删除令牌
+    public void removeAuthToken(String userId) {
+        String tokenKey = AUTH_TOKEN_PREFIX + userId;
+        commonCacheOperator.remove(tokenKey);
+    }
     private void clearLoginErrorTimes(String userAccount) {
         String loginErrorKey = LOGIN_ERROR_TIMES_KEY_PREFIX + userAccount;
         // 删除redis中的key

+ 4 - 1
snowy-server/snowy-gateway-app/src/main/java/vip/xiaonuo/gateway/config/GatewayConfigure.java

@@ -161,7 +161,10 @@ public class GatewayConfigure {
             "/api/webapp/disk/CollegeUser/add",
             "/api/webapp/disk/CollegeOrg/add",
             "/api/webapp/disk/CollegePosition/add",
-            "/api/webapp/disk/CollegeUser/getUser"
+            "/api/webapp/disk/CollegeUser/getUser",
+            "/api/webapp/disk/courseauditrecord/loginJump",
+            "/api/webapp/js/axios.min.js",
+            "/api/webapp/disk/CollegeUser/getToken"
     };
 
     /**

+ 2 - 2
snowy-server/snowy-gateway-app/src/main/resources/bootstrap.yml

@@ -10,7 +10,7 @@ spring:
     nacos:
       config:
         server-addr: ${REGISTER_HOST:192.168.1.245}:${REGISTER_PORT:18848}
-        namespace: ${NAMESPACE_ID:snowy-cloud-2x-ent-dev}
+        namespace: ${NAMESPACE_ID:pans}
         group: ${spring.profiles.active}
         prefix: ${spring.application.name}
         file-extension: yaml
@@ -18,7 +18,7 @@ spring:
         password: ${REGISTER_PASSWORD:nacos}
       discovery:
         server-addr: ${spring.cloud.nacos.config.server-addr}
-        namespace: ${NAMESPACE_ID:snowy-cloud-2x-ent-dev}
+        namespace: ${NAMESPACE_ID:pans}
         group: ${spring.profiles.active}
         username: ${spring.cloud.nacos.config.username}
         password: ${spring.cloud.nacos.config.password}

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini