Ver código fonte

merge code execel

wuheng 1 ano atrás
pai
commit
0e36db4cbc
32 arquivos alterados com 960 adições e 4 exclusões
  1. 6 0
      common/src/main/java/com/koobietech/eas/common/constant/Disabled.java
  2. 11 0
      common/src/main/java/com/koobietech/eas/common/pojo/JwtUserDto.java
  3. 17 0
      common/src/main/java/com/koobietech/eas/common/utils/JwtManager.java
  4. 2 0
      common/src/main/java/com/koobietech/eas/common/utils/PasswordManager.java
  5. 1 1
      controller/src/main/java/com/koobietech/eas/ControllerApplication.java
  6. 28 0
      controller/src/main/java/com/koobietech/eas/controller/AdminLoginController.java
  7. 115 0
      controller/src/main/java/com/koobietech/eas/controller/EasEduCategoryController.java
  8. 114 0
      controller/src/main/java/com/koobietech/eas/controller/EasEduSubjectsController.java
  9. 2 0
      controller/src/main/java/com/koobietech/eas/controller/EasUserController.java
  10. 6 0
      controller/src/main/java/com/koobietech/eas/controller/LoginController.java
  11. 1 2
      controller/src/main/resources/application-local.yaml
  12. 10 0
      dao/src/main/java/com/koobietech/eas/dao/Pojo/AdminPojo.java
  13. 17 0
      dao/src/main/java/com/koobietech/eas/dao/adminLoginPojo/Department.java
  14. 15 0
      dao/src/main/java/com/koobietech/eas/dao/adminLoginPojo/Permission.java
  15. 16 0
      dao/src/main/java/com/koobietech/eas/dao/adminLoginPojo/UserDetail.java
  16. 13 0
      dao/src/main/java/com/koobietech/eas/dao/dto/LoginToken.java
  17. 18 0
      dao/src/main/java/com/koobietech/eas/dao/mapper/AdminLoginMapper.java
  18. 84 0
      dao/src/main/resources/com/koobietech/eas/dao/mapper/AdminLoginMapper.xml
  19. 0 0
      git
  20. 5 0
      pom.xml
  21. 6 1
      security/pom.xml
  22. 7 0
      security/src/main/java/com/koobietech/eas/security/config/SecurityConfig.java
  23. 59 0
      security/src/main/java/com/koobietech/eas/security/filter/EasSecurityFilter.java
  24. 5 0
      service/pom.xml
  25. 9 0
      service/src/main/java/com/koobietech/eas/service/AdminLoginService.java
  26. 23 0
      service/src/main/java/com/koobietech/eas/service/EasEduCategoryService.java
  27. 21 0
      service/src/main/java/com/koobietech/eas/service/EasEduSubjectsService.java
  28. 17 0
      service/src/main/java/com/koobietech/eas/service/LoginRedisService.java
  29. 114 0
      service/src/main/java/com/koobietech/eas/service/impl/AdminLoginServiceImpl.java
  30. 81 0
      service/src/main/java/com/koobietech/eas/service/impl/EasEduCategoryServiceImpl.java
  31. 86 0
      service/src/main/java/com/koobietech/eas/service/impl/EasEduSubjectsServiceImpl.java
  32. 51 0
      service/src/main/java/com/koobietech/eas/service/impl/LoginRedisServiceImpl.java

+ 6 - 0
common/src/main/java/com/koobietech/eas/common/constant/Disabled.java

@@ -0,0 +1,6 @@
+package com.koobietech.eas.common.constant;
+
+public enum Disabled {
+        N,
+        Y
+}

+ 11 - 0
common/src/main/java/com/koobietech/eas/common/pojo/JwtUserDto.java

@@ -1,5 +1,6 @@
 package com.koobietech.eas.common.pojo;
 
+import com.koobietech.eas.common.constant.UserType;
 import lombok.Data;
 
 @Data
@@ -7,4 +8,14 @@ public class JwtUserDto {
     String username;
     Long id;
     Enum type;
+
+    public JwtUserDto(String username, Long id, Enum type) {
+        this.username = username;
+        this.id = id;
+        this.type = type;
+    }
+
+    public JwtUserDto() {
+
+    }
 }

+ 17 - 0
common/src/main/java/com/koobietech/eas/common/utils/JwtManager.java

@@ -39,6 +39,23 @@ public class JwtManager {
         return sign;
     }
 
+    /**
+     * 创建 token
+     * @param userDto
+     * @return
+     */
+    public String createJwt(JwtUserDto userDto, Integer expires){
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(calendar.DATE, expires);
+        String sign = JWT.create()
+                .withClaim("user", userDto.getUsername())
+                .withClaim("id", userDto.getId())
+                .withClaim("type", userDto.getType().toString())
+                .withExpiresAt( calendar.getTime() )
+                .sign(Algorithm.HMAC256(SECRET));
+        return sign;
+    }
+
     /**
      * 解密 Token
      * @param token

+ 2 - 0
common/src/main/java/com/koobietech/eas/common/utils/PasswordManager.java

@@ -4,10 +4,12 @@ import cn.hutool.crypto.SecureUtil;
 import cn.hutool.crypto.symmetric.AES;
 import com.koobietech.eas.common.exception.EasException;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
 
 
 import java.nio.charset.StandardCharsets;
 
+@Component
 public class PasswordManager {
 
 

+ 1 - 1
controller/src/main/java/com/koobietech/eas/ControllerApplication.java

@@ -7,7 +7,7 @@ import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.FilterType;
 
 @SpringBootApplication
-@MapperScan(basePackages = {"com.koobietech.eas.mbg.mapper"})
+@MapperScan(basePackages = {"com.koobietech.eas.mbg.mapper","com.koobietech.eas.dao.mapper"})
 @ComponentScan(basePackages = {"com.koobietech.eas"}, excludeFilters = {
         @ComponentScan.Filter(type = FilterType.REGEX, pattern  = {
                 "com.koobietech.eas.mbg.+"

+ 28 - 0
controller/src/main/java/com/koobietech/eas/controller/AdminLoginController.java

@@ -0,0 +1,28 @@
+package com.koobietech.eas.controller;
+
+
+import com.koobietech.eas.common.result.JsonResult;
+import com.koobietech.eas.dao.Pojo.AdminPojo;
+import com.koobietech.eas.dao.dto.LoginToken;
+import com.koobietech.eas.service.AdminLoginService;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+public class AdminLoginController {
+    @Resource
+    private AdminLoginService adminLoginService;
+
+    @RequestMapping("/adminLogin")
+    public JsonResult adminLogin(@RequestBody AdminPojo adminPojo){
+
+        LoginToken result = adminLoginService.adminLogin(adminPojo);
+
+        return JsonResult.data(result);
+    }
+
+
+}

+ 115 - 0
controller/src/main/java/com/koobietech/eas/controller/EasEduCategoryController.java

@@ -0,0 +1,115 @@
+package com.koobietech.eas.controller;
+
+import com.github.pagehelper.PageHelper;
+import com.koobietech.eas.common.constant.Disabled;
+import com.koobietech.eas.common.result.JsonPageResult;
+import com.koobietech.eas.common.result.JsonResult;
+import com.koobietech.eas.common.result.PageData;
+import com.koobietech.eas.mbg.model.EasEduCategory;
+import com.koobietech.eas.service.EasEduCategoryService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+import java.util.List;
+
+@RestController
+@Tag(name = "课程分类控制器")
+public class EasEduCategoryController {
+
+    @Resource
+    EasEduCategoryService easEduCategoryService;
+
+    /**
+     * 添加类别
+     * @param easEduCategory
+     * @return
+     */
+    @PostMapping(value = "/addEasEduCategory")
+    @Operation(summary = "添加课程类别" , description = "用于添加课程类别")
+    public JsonResult addEasEduCategory(@RequestBody EasEduCategory easEduCategory ){
+        int add = easEduCategoryService.addEasEduCategory( easEduCategory );
+        System.out.println( add );
+        return JsonResult.ok("添加成功");
+    }
+
+    /**
+     * 更新
+     * @param easEduCategory
+     * @return
+     */
+    @PostMapping(value = "/updateEasEduCategory")
+    @Operation(summary = "课程类别更新" , description = "用于课程类别更新")
+    public JsonResult updateEasEduCategory(@RequestBody EasEduCategory easEduCategory){
+        int i = easEduCategoryService.updateEasEduCategory( easEduCategory );
+        if (i > 0){
+            return JsonResult.ok();
+        }else {
+            return JsonResult.fail();
+        }
+    }
+
+    /**
+     * 根据 Id 删除
+     * @param id
+     * @return
+     */
+    @DeleteMapping(value = "/deleteById/{id}")
+    @Operation(summary = "根据Id删除课程类别" , description = "用于根据Id删除课程类别")
+    public JsonResult deleteById(@PathVariable Integer id){
+        int i = easEduCategoryService.deleteById(id);
+        if (i > 0){
+            return JsonResult.ok();
+        }else {
+            return JsonResult.fail();
+        }
+    }
+
+    /**
+     * id 查询
+     * @param id
+     * @return
+     */
+    @GetMapping(value = "/selectById")
+    @Operation(summary = "根据Id查询对应课程类别" , description = "用于根据Id查询课程类别")
+    public JsonResult selectById(Integer id){
+        EasEduCategory easEduCategory = easEduCategoryService.selectById(id);
+        System.out.println(
+                Disabled.valueOf(easEduCategory.getDisabled())
+        );
+        return JsonResult.data( easEduCategory );
+    }
+
+    /**
+     * 查询全部课程
+     * @return
+     */
+    @GetMapping(value = "/selectAll")
+    @Operation(summary = "查询全部课程类别" , description = "用于查询全部课程类别")
+    public JsonResult selectAll(){
+        List<EasEduCategory> easEduCategories = easEduCategoryService.selectAll();
+        return JsonResult.data( easEduCategories );
+    }
+
+    /**
+     * 通过条件查询课程
+     * @param easEduCategory
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    @PostMapping(value = "/selectByCondition")
+    @Operation(summary = "根据条件进行查询课程类别", description = "用于根据条件查询课程类别")
+    public JsonPageResult selectByCondition(@RequestBody EasEduCategory easEduCategory,
+                                            @RequestParam Integer pageNum, @RequestParam Integer pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        PageData pageData = easEduCategoryService.selectByCondition(easEduCategory);
+        return JsonPageResult.data( pageData );
+    }
+}

+ 114 - 0
controller/src/main/java/com/koobietech/eas/controller/EasEduSubjectsController.java

@@ -0,0 +1,114 @@
+package com.koobietech.eas.controller;
+
+
+import com.github.pagehelper.PageHelper;
+import com.koobietech.eas.common.constant.Disabled;
+import com.koobietech.eas.common.result.JsonPageResult;
+import com.koobietech.eas.common.result.JsonResult;
+import com.koobietech.eas.common.result.PageData;
+import com.koobietech.eas.mbg.model.EasEduCategory;
+import com.koobietech.eas.mbg.model.EasEduSubjects;
+import com.koobietech.eas.service.EasEduSubjectsService;
+import io.swagger.v3.core.util.Json;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@Tag(name = "课程控制器")
+@RequestMapping("/subject")
+public class EasEduSubjectsController {
+
+    @Resource
+    EasEduSubjectsService easEduSubjectsService;
+
+    /**
+     * 添加课程
+     * @param easEduSubjects
+     * @return
+     */
+    @PostMapping(value = "/addSubject")
+    @Operation(summary = "添加课程" , description = "用于添加课程")
+    public JsonResult addSubject( @RequestBody EasEduSubjects easEduSubjects){
+        int addSubject = easEduSubjectsService.addSubject(easEduSubjects);
+        System.out.println(addSubject);
+        return JsonResult.ok("添加成功!");
+    }
+
+    /**
+     * 修改课程
+     * @param easEduSubjects
+     * @return
+     */
+    @PostMapping(value = "/updateSubjects")
+    @Operation(summary = "修改课程" , description = "用于修改课程")
+    public JsonResult updateSubjects( @RequestBody EasEduSubjects easEduSubjects){
+        int update_i = easEduSubjectsService.updateSubjects(easEduSubjects);
+        if (update_i > 0){
+            return JsonResult.ok();
+        }else {
+            return JsonResult.fail();
+        }
+    }
+
+    /**
+     * 删除课程
+     * @param id
+     * @return
+     */
+    @DeleteMapping(value = "/deleteSubjects/{id}")
+    @Operation(summary = "删除课程",description = "用于删除课程")
+    public JsonResult deleteSubjects(@PathVariable Integer id){
+        int delete_i = easEduSubjectsService.deleteSubjects(id);
+        if (delete_i > 0){
+            return JsonResult.ok();
+        }else {
+            return JsonResult.fail();
+        }
+    }
+
+    /**
+     * 根据 id 进行查询
+     * @param id
+     * @return
+     */
+    @GetMapping(value = "/selectById")
+    @Operation(summary = "id查询课程" ,description = "根据id查询课程")
+    public JsonResult selectById(Integer id){
+        EasEduSubjects easEduSubjects = easEduSubjectsService.selectById(id);
+        System.out.println(
+                Disabled.valueOf(easEduSubjects.getDisabled())
+        );
+        return JsonResult.data( easEduSubjects );
+    }
+
+    /**
+     * 查询所有课程及其信息
+     * @return
+     */
+    @GetMapping(value = "/selectAll")
+    @Operation(summary = "查询所有课程",description = "用于查询所有课程")
+    public JsonResult selectAll(){
+        List<EasEduSubjects> easEduSubjects = easEduSubjectsService.selectAll();
+        return JsonResult.data( easEduSubjects );
+    }
+
+    /**
+     * 通过条件查询课程
+     * @param easEduSubjects
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    @PostMapping(value = "/selectByCondition")
+    @Operation(summary = "根据条件进行查询课程", description = "用于根据条件查询课程")
+    public JsonPageResult selectByCondition(@RequestBody EasEduSubjects easEduSubjects,
+                                            @RequestParam Integer pageNum, @RequestParam Integer pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        PageData pageData = easEduSubjectsService.selectByCondition(easEduSubjects);
+        return JsonPageResult.data( pageData );
+    }
+}

+ 2 - 0
controller/src/main/java/com/koobietech/eas/controller/EasUserController.java

@@ -25,4 +25,6 @@ public class EasUserController {
         return demoService.test( easEduSubjects );
     }
 
+
+
 }

+ 6 - 0
controller/src/main/java/com/koobietech/eas/controller/LoginController.java

@@ -0,0 +1,6 @@
+package com.koobietech.eas.controller;
+
+public class LoginController {
+
+
+}

+ 1 - 2
controller/src/main/resources/application-local.yaml

@@ -1,5 +1,5 @@
 server:
-  port: 8081
+  port: 8080
 spring:
   datasource:
     url: jdbc:mysql://127.0.0.1:3306/eas?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=true&tinyInt1isBit=false
@@ -28,4 +28,3 @@ knife4j:
 logging:
   level:
     com.koobietech.eas.*: TRACE
-

+ 10 - 0
dao/src/main/java/com/koobietech/eas/dao/Pojo/AdminPojo.java

@@ -0,0 +1,10 @@
+package com.koobietech.eas.dao.Pojo;
+
+import lombok.Data;
+
+@Data
+public class AdminPojo {
+    private String username;
+    private String passwd;
+
+}

+ 17 - 0
dao/src/main/java/com/koobietech/eas/dao/adminLoginPojo/Department.java

@@ -0,0 +1,17 @@
+package com.koobietech.eas.dao.adminLoginPojo;
+
+import lombok.Data;
+import java.util.Date;
+
+@Data
+public class Department {
+    private Long id;
+    private String depname;
+    private String address;
+    private String phone;
+    private String email;
+    private String manager;
+    private Date createTime;
+    private Date modifyTime;
+    private Integer createUid;
+}

+ 15 - 0
dao/src/main/java/com/koobietech/eas/dao/adminLoginPojo/Permission.java

@@ -0,0 +1,15 @@
+package com.koobietech.eas.dao.adminLoginPojo;
+
+import lombok.Data;
+import java.util.Date;
+
+@Data
+public class Permission {
+    private Integer id;
+    private String name;
+    private Byte isActive;
+    private Date createTime;
+    private Date modifyTime;
+    private Integer createUid;
+    private String description;
+}

+ 16 - 0
dao/src/main/java/com/koobietech/eas/dao/adminLoginPojo/UserDetail.java

@@ -0,0 +1,16 @@
+package com.koobietech.eas.dao.adminLoginPojo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UserDetail {
+    private Long id;
+    private String username;
+    private String phone;
+    private String email;
+    private List<Permission> permissions;
+    private List<Department> departments;
+
+}

+ 13 - 0
dao/src/main/java/com/koobietech/eas/dao/dto/LoginToken.java

@@ -0,0 +1,13 @@
+package com.koobietech.eas.dao.dto;
+
+import lombok.Data;
+
+@Data
+public class LoginToken {
+    String token;
+    String refreshToken;
+    public LoginToken(String token, String refreshToken) {
+        this.token = token;
+        this.refreshToken = refreshToken;
+    }
+}

+ 18 - 0
dao/src/main/java/com/koobietech/eas/dao/mapper/AdminLoginMapper.java

@@ -0,0 +1,18 @@
+package com.koobietech.eas.dao.mapper;
+
+import com.koobietech.eas.dao.adminLoginPojo.Department;
+import com.koobietech.eas.dao.adminLoginPojo.Permission;
+import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
+
+import java.util.List;
+
+public interface AdminLoginMapper {
+    List<Permission> getUserPermissionsById(Long adminId);
+
+    List<Department> getUserDepartmentsById(Long adminId);
+
+    UserDetail getUserDetailById(Long adminId);
+
+
+
+}

+ 84 - 0
dao/src/main/resources/com/koobietech/eas/dao/mapper/AdminLoginMapper.xml

@@ -0,0 +1,84 @@
+<?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.koobietech.eas.dao.mapper.AdminLoginMapper">
+    <resultMap id="permissionResultMap" type="com.koobietech.eas.dao.adminLoginPojo.Permission">
+        <!-- 映射查询结果到实体类属性 -->
+        <id column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="is_active" property="isActive"/>
+        <result column="create_time" property="createTime"/>
+        <result column="modify_time" property="modifyTime"/>
+        <result column="create_uid" property="createUid"/>
+        <result column="description" property="description"/>
+    </resultMap>
+
+    <resultMap id="departmentResultMap" type="com.koobietech.eas.dao.adminLoginPojo.Department">
+        <!-- 映射查询结果到实体类属性 -->
+        <id column="id" property="id"/>
+        <result column="depname" property="depname"/>
+        <result column="address" property="address"/>
+        <result column="phone" property="phone"/>
+        <result column="email" property="email"/>
+        <result column="manager" property="manager"/>
+        <result column="create_time" property="createTime"/>
+        <result column="modify_time" property="modifyTime"/>
+        <result column="create_uid" property="createUid"/>
+    </resultMap>
+
+    <resultMap id="userDetailResultMap" type="com.koobietech.eas.dao.adminLoginPojo.UserDetail">
+        <!-- 映射查询结果到实体类属性 -->
+        <result column="id" property="id"/>
+        <result column="username" property="username"/>
+        <result column="phone" property="phone"/>
+        <result column="email" property="email"/>
+    </resultMap>
+
+
+
+
+<!--    <resultMap id="userDetailResultMap" type="com.koobietech.eas.dao.adminLoginPojo.UserDetail">-->
+<!--        &lt;!&ndash; 映射查询结果到实体类属性 &ndash;&gt;-->
+<!--        <result column="id" property="id" />-->
+<!--        <result column="username" property="username" />-->
+<!--        <result column="phone" property="phone" />-->
+<!--        <result column="email" property="email" />-->
+<!--        <collection property="departments" ofType="com.koobietech.eas.dao.adminLoginPojo.Department">-->
+<!--            <id column="dep_id" property="id" />-->
+<!--            <result column="depname" property="depname" />-->
+<!--            &lt;!&ndash; 其他部门属性的映射 &ndash;&gt;-->
+<!--        </collection>-->
+<!--        <collection property="permissions" ofType="com.koobietech.eas.dao.adminLoginPojo.Permission">-->
+<!--            <id column="per_id" property="id" />-->
+<!--            <result column="name" property="name" />-->
+<!--            &lt;!&ndash; 其他权限属性的映射 &ndash;&gt;-->
+<!--        </collection>-->
+<!--    </resultMap>-->
+
+
+
+
+
+
+    <select id="getUserPermissionsById" resultMap="permissionResultMap">
+        SELECT p.id, p.name, p.is_active, p.create_time, p.modify_time, p.create_uid, p.description
+        FROM eas_sys_userinfo u
+                 JOIN eas_sys_pes_relation pr ON u.id = pr.department_id
+                 JOIN eas_sys_permission p ON pr.permission_id = p.id
+        WHERE u.id = #{adminId};
+    </select>
+
+    <select id="getUserDepartmentsById" resultMap="departmentResultMap">
+        SELECT DISTINCT d.id, d.depname, d.address, d.phone, d.email, d.manager, d.create_time, d.modify_time, d.create_uid
+        FROM eas_sys_userinfo u
+                 JOIN eas_sys_pes_relation pr ON u.id = pr.department_id
+                 JOIN eas_sys_department d ON pr.department_id = d.id
+        WHERE u.id = #{adminId}
+    </select>
+
+    <select id="getUserDetailById" resultMap="userDetailResultMap">
+        SELECT id, username, phone, email
+        FROM eas_sys_userinfo
+        WHERE id = #{adminId}
+    </select>
+
+</mapper>

+ 0 - 0
git


+ 5 - 0
pom.xml

@@ -44,6 +44,11 @@
                 <artifactId>easypoi-spring-boot-starter</artifactId>
                 <version>${easypoi.version}</version>
             </dependency>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-starter-security</artifactId>
+                <version>${spring-boot.version}</version>
+            </dependency>
             <dependency>
                 <groupId>com.github.pagehelper</groupId>
                 <artifactId>pagehelper-spring-boot-starter</artifactId>

+ 6 - 1
security/pom.xml

@@ -25,7 +25,12 @@
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-security</artifactId>
-            <version>${spring-boot.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.koobietech.eas</groupId>
+            <artifactId>service</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+            <scope>compile</scope>
         </dependency>
     </dependencies>
 

+ 7 - 0
security/src/main/java/com/koobietech/eas/security/config/SecurityConfig.java

@@ -7,6 +7,8 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
 import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer;
 import org.springframework.security.config.http.SessionCreationPolicy;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.security.web.SecurityFilterChain;
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 
@@ -43,4 +45,9 @@ public class SecurityConfig {
 
         return and.build();
     }
+
+    @Bean
+    public PasswordEncoder passwordEncoder() {
+        return new BCryptPasswordEncoder();
+    }
 }

+ 59 - 0
security/src/main/java/com/koobietech/eas/security/filter/EasSecurityFilter.java

@@ -1,9 +1,23 @@
 package com.koobietech.eas.security.filter;
 
+import com.koobietech.eas.common.pojo.JwtUserDto;
+import com.koobietech.eas.common.utils.JwtManager;
+import com.koobietech.eas.dao.adminLoginPojo.Permission;
+import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
+import com.koobietech.eas.service.LoginRedisService;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
 import org.springframework.web.filter.OncePerRequestFilter;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import javax.annotation.Resource;
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
@@ -12,9 +26,54 @@ import javax.servlet.http.HttpServletResponse;
 @Component
 public class EasSecurityFilter extends OncePerRequestFilter {
 
+    @Resource
+    private LoginRedisService loginRedisService;
+
+    @Resource
+    JwtManager jwtManager;
 
     @Override
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
+        //在这里添加Token判断
+        System.out.println("EasSecurityFilter");
+        //从请求里面拿到token
+        String token = request.getHeader(request.getHeader("Authorization"));
+        //判断token是否存在
+        if (StringUtils.hasText(token)) {
+            //解析token成JwtUserDto
+            JwtUserDto jwtUserDto = jwtManager.decodeJwt(token);
+            //判断token是否有效
+            UserDetail userDetail = loginRedisService.checkToken(jwtUserDto);
+
+            // 获取当前的 SecurityContext 对象,用于保存当前用户的安全上下文信息
+            SecurityContext context = SecurityContextHolder.getContext();
+
+            if (Objects.nonNull(userDetail)) {
+                // 如果获取到了有效的用户对象
+
+                // 获取用户的权限列表
+                List<Permission> permission = userDetail.getPermissions();
+
+                // 创建一个 ArrayList 集合,用于存储用户权限对应的 SimpleGrantedAuthority 权限对象
+                ArrayList<SimpleGrantedAuthority> objects = new ArrayList<>();
+
+                // 遍历用户的权限列表
+                for (Permission adminPermission: permission) {
+                    // 创建一个 SimpleGrantedAuthority 权限对象,并添加到集合中
+                    SimpleGrantedAuthority authority = new SimpleGrantedAuthority(adminPermission.getDescription());
+                    objects.add(authority);
+                }
+
+                // 使用用户的用户名、空凭证参数和权限对象集合创建一个 UsernamePasswordAuthenticationToken 身份验证令牌
+                UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(userDetail.getUsername(), null, objects);
+
+                // 将身份验证令牌设置到当前的 SecurityContext 中
+                context.setAuthentication(authenticationToken);
+            }
+        }
+
         filterChain.doFilter(request, response);
     }
+
+
 }

+ 5 - 0
service/pom.xml

@@ -36,6 +36,11 @@
             <groupId>com.koobietech.eas</groupId>
             <artifactId>common</artifactId>
             <version>0.0.1-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
         </dependency>
     </dependencies>
 

+ 9 - 0
service/src/main/java/com/koobietech/eas/service/AdminLoginService.java

@@ -0,0 +1,9 @@
+package com.koobietech.eas.service;
+
+import com.koobietech.eas.common.result.JsonResult;
+import com.koobietech.eas.dao.Pojo.AdminPojo;
+import com.koobietech.eas.dao.dto.LoginToken;
+
+public interface AdminLoginService {
+    LoginToken adminLogin(AdminPojo adminPojo);
+}

+ 23 - 0
service/src/main/java/com/koobietech/eas/service/EasEduCategoryService.java

@@ -0,0 +1,23 @@
+package com.koobietech.eas.service;
+
+import com.koobietech.eas.common.result.PageData;
+import com.koobietech.eas.mbg.model.EasEduCategory;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+public interface EasEduCategoryService {
+
+    int addEasEduCategory( EasEduCategory easEduCategory );
+
+    int updateEasEduCategory( EasEduCategory easEduCategory );
+
+    int deleteById(int id);
+
+    EasEduCategory selectById( Integer id );
+
+    List<EasEduCategory> selectAll();
+
+    PageData selectByCondition(EasEduCategory easEduCategory );
+
+}

+ 21 - 0
service/src/main/java/com/koobietech/eas/service/EasEduSubjectsService.java

@@ -0,0 +1,21 @@
+package com.koobietech.eas.service;
+
+import com.koobietech.eas.common.result.PageData;
+import com.koobietech.eas.mbg.model.EasEduSubjects;
+
+import java.util.List;
+
+public interface EasEduSubjectsService {
+
+    int addSubject(EasEduSubjects easEduSubjects);
+
+    int updateSubjects(EasEduSubjects easEduSubjects);
+
+    int deleteSubjects( int id );
+
+    EasEduSubjects selectById( Integer id );
+
+    List<EasEduSubjects> selectAll();
+
+    PageData selectByCondition(EasEduSubjects easEduSubjects);
+}

+ 17 - 0
service/src/main/java/com/koobietech/eas/service/LoginRedisService.java

@@ -0,0 +1,17 @@
+package com.koobietech.eas.service;
+
+import com.koobietech.eas.common.pojo.JwtUserDto;
+import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
+
+
+public interface LoginRedisService {
+    UserDetail checkToken(JwtUserDto jwtUserDto);
+
+    UserDetail checkRefreshToken(JwtUserDto jwtUserDto);
+
+    void loginSaveCache(String redisTokenKey, UserDetail userDetailInRedis, Integer token_expires);
+
+    String createJwtTokenKey(JwtUserDto jwtUserDto);
+
+    String createJwtRefreshTokenKey(JwtUserDto jwtUserDto);
+}

+ 114 - 0
service/src/main/java/com/koobietech/eas/service/impl/AdminLoginServiceImpl.java

@@ -0,0 +1,114 @@
+package com.koobietech.eas.service.impl;
+
+import com.koobietech.eas.common.constant.UserType;
+import com.koobietech.eas.common.exception.EasException;
+import com.koobietech.eas.common.pojo.JwtUserDto;
+import com.koobietech.eas.common.utils.JwtManager;
+import com.koobietech.eas.common.utils.PasswordManager;
+import com.koobietech.eas.dao.Pojo.AdminPojo;
+import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
+import com.koobietech.eas.dao.dto.LoginToken;
+import com.koobietech.eas.dao.mapper.AdminLoginMapper;
+import com.koobietech.eas.mbg.mapper.EasSysUserinfoMapper;
+import com.koobietech.eas.mbg.model.EasSysUserinfo;
+import com.koobietech.eas.mbg.model.EasSysUserinfoExample;
+import com.koobietech.eas.service.AdminLoginService;
+import com.koobietech.eas.service.LoginRedisService;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class AdminLoginServiceImpl implements AdminLoginService {
+
+    @Resource
+    private PasswordEncoder passwordEncoder;
+    @Resource
+    private PasswordManager passwordManager;
+    @Resource
+    private AdminLoginMapper adminLoginMapper;
+    @Resource
+    private EasSysUserinfoMapper easSysUserinfoMapper;
+    @Resource
+    private LoginRedisService loginRedisService;
+    @Resource
+    private JwtManager jwtManager;
+
+    @Override
+    public LoginToken adminLogin(AdminPojo adminPojo) {
+        if (adminPojo.getUsername() == null || adminPojo.getPasswd() == null || adminPojo.getUsername().isEmpty() || adminPojo.getPasswd().isEmpty()) {
+            throw new EasException("用户不存在", 509);
+        }
+
+        EasSysUserinfo easSysUserinfo = findAdminByUsername(adminPojo.getUsername(), adminPojo.getPasswd());
+
+        // 接收到对象,根据这个信息去查询数据库,然后自定义sql查用户信息,存在redis里面当做token
+        System.out.println(easSysUserinfo);
+        //先获取id,进行枚举判断
+        Long id = easSysUserinfo.getId();
+        //先调用自定义sql查询detail类中的数据 最后把这个类封装到redis里面
+        UserDetail userDetailInRedis = adminLoginMapper.getUserDetailById(id);
+        System.out.println("接收前" + userDetailInRedis);
+        userDetailInRedis.setDepartments(adminLoginMapper.getUserDepartmentsById(id));
+        userDetailInRedis.setPermissions(adminLoginMapper.getUserPermissionsById(id));
+        System.out.println("接收后" + userDetailInRedis);
+
+        // 先调用自定义sql查询用户详细信息、部门信息和权限信息
+        UserType userType = UserType.TEACHER;
+        if (userDetailInRedis.getUsername().equals("admin")) {
+            userType = UserType.ADMIN;
+        }
+
+        // token过期时间
+        Integer token_expires = 30;
+        Integer refreshToken_expires = 60;
+
+        // 生成token
+        JwtUserDto jwtUserDto = new JwtUserDto(userDetailInRedis.getUsername(), userDetailInRedis.getId(), userType);
+        String token = jwtManager.createJwt(jwtUserDto, token_expires);
+        String refreshToken = jwtManager.createJwt(jwtUserDto, refreshToken_expires);
+
+        // 生成redis key
+        String redisTokenKey = loginRedisService.createJwtTokenKey(jwtUserDto);
+        String redisRefreshTokenKey = loginRedisService.createJwtRefreshTokenKey(jwtUserDto);
+
+        // 将token存入redis
+        loginRedisService.loginSaveCache(redisTokenKey, userDetailInRedis, token_expires);
+        loginRedisService.loginSaveCache(redisRefreshTokenKey, userDetailInRedis, refreshToken_expires);
+
+        // 登录成功
+        return new LoginToken(token, refreshToken);
+    }
+
+    private EasSysUserinfo findAdminByUsername(String username, String password)  {
+        EasSysUserinfoExample easSysUserinfoExample = new EasSysUserinfoExample();
+        easSysUserinfoExample.createCriteria().andUsernameEqualTo(username);
+        List<EasSysUserinfo> adminList = easSysUserinfoMapper.selectByExample(easSysUserinfoExample);
+
+        // 使用Optional简化判断
+        Optional<EasSysUserinfo> optionalAdmin = adminList.stream().findFirst();
+
+        if (optionalAdmin.isEmpty()) {
+            throw new EasException("用户不存在", 9902);
+        }
+        if (adminList.size() > 1) {
+            throw new EasException("用户数据异常", 9902);
+        }
+
+        EasSysUserinfo easSysUserinfo = optionalAdmin.get();
+        validatePassword(password, easSysUserinfo.getPasswd());
+
+        return easSysUserinfo;
+    }
+
+    private void validatePassword(String inputPassword, String encryptedPassword){
+        String decryptedPassword = passwordManager.decryptPassword(inputPassword);
+        System.out.println("前端解密来的decryptedPassword: " + decryptedPassword);
+        System.out.println("数据库查到的密码easSysUserinfo.getPasswd(): " + encryptedPassword);
+        if (!passwordEncoder.matches(decryptedPassword, encryptedPassword)) {
+            throw new EasException("密码不正确", 9901);
+        }
+    }
+}

+ 81 - 0
service/src/main/java/com/koobietech/eas/service/impl/EasEduCategoryServiceImpl.java

@@ -0,0 +1,81 @@
+package com.koobietech.eas.service.impl;
+
+import com.koobietech.eas.common.result.PageData;
+import com.koobietech.eas.mbg.mapper.EasEduCategoryMapper;
+import com.koobietech.eas.mbg.model.EasEduCategory;
+import com.koobietech.eas.mbg.model.EasEduCategoryExample;
+import com.koobietech.eas.service.EasEduCategoryService;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.Objects;
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class EasEduCategoryServiceImpl implements EasEduCategoryService {
+
+    @Resource
+    EasEduCategoryMapper easEduCategoryMapper;
+
+    @Override
+    public int addEasEduCategory(EasEduCategory easEduCategory) {
+        easEduCategory.setCreateTime(new Date());
+        easEduCategory.setModifyTime(new Date());
+       return  easEduCategoryMapper.insert(easEduCategory);
+    }
+
+    @Override
+    public int updateEasEduCategory(EasEduCategory easEduCategory) {
+        return easEduCategoryMapper.updateByPrimaryKey( easEduCategory );
+    }
+
+    @Override
+    public int deleteById(int id) {
+        return easEduCategoryMapper.deleteByPrimaryKey( id );
+    }
+
+    @Override
+    public EasEduCategory selectById(Integer id) {
+        System.out.println( "ID:" + id );
+        return easEduCategoryMapper.selectByPrimaryKey( id );
+    }
+
+    @Override
+    public List<EasEduCategory> selectAll() {
+        return easEduCategoryMapper.selectByExample(null);
+    }
+
+    @Override
+    public PageData selectByCondition(EasEduCategory easEduCategory) {
+        EasEduCategoryExample easEduCategoryExample = new EasEduCategoryExample();
+        EasEduCategoryExample.Criteria criteria = easEduCategoryExample.createCriteria();
+        if ( Objects.nonNull(easEduCategory) ) {
+            if (Objects.nonNull(easEduCategory.getId())) {
+                criteria.andIdEqualTo(easEduCategory.getId());
+            }
+            if (StringUtils.hasText(easEduCategory.getName())) {
+                criteria.andNameLike("%" + easEduCategory.getName() + "%");
+            }
+            if (StringUtils.hasText(easEduCategory.getDescription())) {
+                criteria.andDescriptionLike("%" + easEduCategory.getDescription() + "%");
+            }
+            if (Objects.nonNull(easEduCategory.getCreateTime())) {
+                criteria.andCreateTimeGreaterThan(easEduCategory.getCreateTime());
+            }
+            if (Objects.nonNull(easEduCategory.getModifyTime())) {
+                criteria.andCreateTimeGreaterThan(easEduCategory.getModifyTime());
+            }
+            if (Objects.nonNull(easEduCategory.getCreateUid())) {
+                criteria.andCreateUidEqualTo(easEduCategory.getCreateUid());
+            }
+            if (StringUtils.hasText(easEduCategory.getDisabled())) {
+                criteria.andDisabledEqualTo(easEduCategory.getDisabled());
+            }
+        }
+        List<EasEduCategory> easEduCategories = easEduCategoryMapper.selectByExample(easEduCategoryExample);
+        long l = easEduCategoryMapper.countByExample(easEduCategoryExample);
+        return PageData.init( easEduCategories, l );
+    }
+}

+ 86 - 0
service/src/main/java/com/koobietech/eas/service/impl/EasEduSubjectsServiceImpl.java

@@ -0,0 +1,86 @@
+package com.koobietech.eas.service.impl;
+import com.koobietech.eas.common.result.PageData;
+import com.koobietech.eas.mbg.mapper.EasEduSubjectsMapper;
+import com.koobietech.eas.mbg.model.EasEduCategoryExample;
+import com.koobietech.eas.mbg.model.EasEduSubjects;
+import com.koobietech.eas.mbg.model.EasEduSubjectsExample;
+import com.koobietech.eas.service.EasEduSubjectsService;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import javax.xml.crypto.Data;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+@Service
+public class EasEduSubjectsServiceImpl implements EasEduSubjectsService {
+
+    @Resource
+    EasEduSubjectsMapper easEduSubjectsMapper;
+
+
+    @Override
+    public int addSubject(EasEduSubjects easEduSubjects) {
+        easEduSubjects.setCreateTime(new Date());
+        easEduSubjects.setModifyTime(new Date());
+        return easEduSubjectsMapper.insert(easEduSubjects);
+    }
+
+    @Override
+    public int updateSubjects(EasEduSubjects easEduSubjects) {
+        return easEduSubjectsMapper.updateByPrimaryKey(easEduSubjects);
+    }
+
+    @Override
+    public int deleteSubjects(int id) {
+        return easEduSubjectsMapper.deleteByPrimaryKey( id );
+    }
+
+    @Override
+    public EasEduSubjects selectById(Integer id) {
+        System.out.println("Id" + id);
+        return easEduSubjectsMapper.selectByPrimaryKey(id);
+    }
+
+    @Override
+    public List<EasEduSubjects> selectAll() {
+        return easEduSubjectsMapper.selectByExample(null);
+    }
+
+    @Override
+    public PageData selectByCondition(EasEduSubjects easEduSubjects) {
+        EasEduSubjectsExample easEduSubjectsExample = new EasEduSubjectsExample();
+        EasEduSubjectsExample.Criteria criteria = easEduSubjectsExample.createCriteria();
+        if ( Objects.nonNull(easEduSubjects) ) {
+            if (Objects.nonNull(easEduSubjects.getId())) {
+                criteria.andIdEqualTo(easEduSubjects.getId());
+            }
+            if (StringUtils.hasText(easEduSubjects.getName())) {
+                criteria.andNameLike("%" + easEduSubjects.getName() + "%");
+            }
+//            if (StringUtils.hasText(easEduSubjects.getDescription())) {
+//                criteria.andDescriptionLike("%" + easEduSubjects.getDescription() + "%");
+//            }
+            if (Objects.nonNull(easEduSubjects.getCategoryId())){
+                criteria.andCategoryIdEqualTo(easEduSubjects.getCategoryId());
+            }
+            if (Objects.nonNull(easEduSubjects.getCreateTime())) {
+                criteria.andCreateTimeGreaterThan(easEduSubjects.getCreateTime());
+            }
+            if (Objects.nonNull(easEduSubjects.getModifyTime())) {
+                criteria.andCreateTimeGreaterThan(easEduSubjects.getModifyTime());
+            }
+            if (Objects.nonNull(easEduSubjects.getCreateUid())) {
+                criteria.andCreateUidEqualTo(easEduSubjects.getCreateUid());
+            }
+            if (StringUtils.hasText(easEduSubjects.getDisabled())) {
+                criteria.andDisabledEqualTo(easEduSubjects.getDisabled());
+            }
+        }
+        List<EasEduSubjects> easEduSubjects1 = easEduSubjectsMapper.selectByExample(easEduSubjectsExample);
+        long l = easEduSubjectsMapper.countByExample(easEduSubjectsExample);
+        return PageData.init(easEduSubjects1,l);
+    }
+}

+ 51 - 0
service/src/main/java/com/koobietech/eas/service/impl/LoginRedisServiceImpl.java

@@ -0,0 +1,51 @@
+package com.koobietech.eas.service.impl;
+
+import com.koobietech.eas.common.exception.EasException;
+import com.koobietech.eas.common.pojo.JwtUserDto;
+import com.koobietech.eas.common.service.RedisService;
+import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
+import com.koobietech.eas.service.LoginRedisService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class LoginRedisServiceImpl implements LoginRedisService {
+
+    @Autowired
+    RedisService redisService;
+
+
+    @Override
+    public UserDetail checkToken(JwtUserDto jwtUserDto) {
+        String jwtKey = createJwtTokenKey(jwtUserDto);
+        //判断redis里面是否有这个key
+        if (!redisService.hasKey(jwtKey)) {
+            throw new EasException("token已过期");
+        }
+        return (UserDetail) redisService.get(jwtKey);
+    }
+
+    @Override
+    public UserDetail checkRefreshToken(JwtUserDto jwtUserDto) {
+        String jwtKey = createJwtTokenKey(jwtUserDto);
+
+        return (UserDetail) redisService.get(jwtKey);
+    }
+
+    @Override
+    public void loginSaveCache(String redisTokenKey, UserDetail userDetailInRedis, Integer token_expires) {
+        redisService.set(redisTokenKey, userDetailInRedis, token_expires);
+    }
+
+    @Override
+    public String createJwtTokenKey(JwtUserDto jwtUserDto) {
+        //根据jwtUserDto 生成jwtKey,格式为:eas_token_{id}_{username}_{type}
+        return "eas_token_" + jwtUserDto.getId() + "_" + jwtUserDto.getUsername() + "_" + jwtUserDto.getType();
+    }
+
+    @Override
+    public String createJwtRefreshTokenKey(JwtUserDto jwtUserDto) {
+        //根据jwtUserDto 生成jwtKey,格式为:eas_refresh_{id}_{username}_{type}
+        return "eas_refresh_" + jwtUserDto.getId() + "_" + jwtUserDto.getUsername() + "_" + jwtUserDto.getType();
+    }
+}