Forráskód Böngészése

恶意访问ip加入黑名单

xusl 2 éve
szülő
commit
1fa1c046e2
25 módosított fájl, 145 hozzáadás és 52 törlés
  1. 5 0
      backend/src/main/java/com/jiayue/ssi/config/MybatisPlusConfig.java
  2. 6 3
      backend/src/main/java/com/jiayue/ssi/config/WebSecurityConfig.java
  3. 6 1
      backend/src/main/java/com/jiayue/ssi/constant/CacheConstants.java
  4. 0 1
      backend/src/main/java/com/jiayue/ssi/controller/ServerController.java
  5. 0 3
      backend/src/main/java/com/jiayue/ssi/controller/SysLogininforController.java
  6. 0 5
      backend/src/main/java/com/jiayue/ssi/controller/SysMenuController.java
  7. 0 3
      backend/src/main/java/com/jiayue/ssi/controller/SysOperlogController.java
  8. 1 5
      backend/src/main/java/com/jiayue/ssi/controller/SysParameterController.java
  9. 0 4
      backend/src/main/java/com/jiayue/ssi/controller/SysRoleController.java
  10. 0 7
      backend/src/main/java/com/jiayue/ssi/controller/SysUserController.java
  11. 0 2
      backend/src/main/java/com/jiayue/ssi/controller/UserLoginController.java
  12. 26 0
      backend/src/main/java/com/jiayue/ssi/entity/SysBlacklist.java
  13. 33 4
      backend/src/main/java/com/jiayue/ssi/filter/InterfaceLimitFilter.java
  14. 1 0
      backend/src/main/java/com/jiayue/ssi/filter/MailCodeFilter.java
  15. 1 0
      backend/src/main/java/com/jiayue/ssi/filter/VerifyCodeFilter.java
  16. 18 0
      backend/src/main/java/com/jiayue/ssi/mapper/SysBlacklistMapper.java
  17. 15 0
      backend/src/main/java/com/jiayue/ssi/service/SysBlacklistService.java
  18. 18 0
      backend/src/main/java/com/jiayue/ssi/service/impl/SysBlacklistServiceImpl.java
  19. 1 3
      backend/src/main/java/com/jiayue/ssi/service/impl/UserServiceImpl.java
  20. 2 2
      backend/src/main/java/com/jiayue/ssi/util/InterfaceLimitUtil.java
  21. 1 1
      backend/src/main/java/com/jiayue/ssi/util/SecurityContextUtil.java
  22. 8 4
      ui/src/permission.js
  23. 2 0
      ui/src/utils/request.js
  24. 0 3
      ui/src/views/404.vue
  25. 1 1
      ui/src/views/sysManager/userManager/index.vue

+ 5 - 0
backend/src/main/java/com/jiayue/ssi/config/MybatisPlusConfig.java

@@ -3,9 +3,14 @@ package com.jiayue.ssi.config;
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+
+import com.jiayue.ssi.mapper.SysBlacklistMapper;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+import javax.annotation.Resource;
+
+
 /**
  * 注册mp分页
  *

+ 6 - 3
backend/src/main/java/com/jiayue/ssi/config/WebSecurityConfig.java

@@ -64,12 +64,15 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 //        auth.userDetailsService(userServiceImpl);
 //    }
 
+    @Autowired
+    InterfaceLimitFilter interfaceLimitFilter;
+
     @Override
     protected void configure(HttpSecurity httpSecurity) throws Exception {
-        httpSecurity.addFilterBefore(new InterfaceLimitFilter(), UsernamePasswordAuthenticationFilter.class);
+        httpSecurity.addFilterBefore(interfaceLimitFilter, LogoutFilter.class);
         httpSecurity.addFilterBefore(new VerifySmFilter(), LogoutFilter.class);
-        httpSecurity.addFilterBefore(new VerifyCodeFilter(), UsernamePasswordAuthenticationFilter.class);
-        httpSecurity.addFilterBefore(new MailCodeFilter(), UsernamePasswordAuthenticationFilter.class);
+        httpSecurity.addFilterBefore(new VerifyCodeFilter(), LogoutFilter.class);
+        httpSecurity.addFilterBefore(new MailCodeFilter(), LogoutFilter.class);
         httpSecurity.addFilterBefore(jwtAuthenticationTokenFilter, LogoutFilter.class);
         httpSecurity
                 // 由于使用的是JWT,我们这里不需要csrf

+ 6 - 1
backend/src/main/java/com/jiayue/ssi/constant/CacheConstants.java

@@ -54,9 +54,14 @@ public class CacheConstants
     /**
      * 登录token存储,map<用户名,token:授权时间>
      */
-    public static final Map<String,String> LOGIN_TOKEN_MAP = new ConcurrentHashMap<String,String>();
+    public static Map<String,String> LOGIN_TOKEN_MAP = new ConcurrentHashMap<String,String>();
     /**
      * 是否使用邮箱口令 默认:true使用
      */
     public static boolean use_send_mail = true;
+
+    /**
+     * ip黑名单缓存
+     */
+    public static ConcurrentMap<String, Long> blacklistMap = new ConcurrentHashMap<>();
 }

+ 0 - 1
backend/src/main/java/com/jiayue/ssi/controller/ServerController.java

@@ -18,7 +18,6 @@ import org.springframework.web.bind.annotation.RestController;
 public class ServerController {
     @PreAuthorize("@ss.hasPermi('monitor:server:list')")
     @GetMapping()
-    @InterfaceLimit
     public ResponseVO getInfo() throws Exception {
         Server server = new Server();
         server.copyTo();

+ 0 - 3
backend/src/main/java/com/jiayue/ssi/controller/SysLogininforController.java

@@ -35,7 +35,6 @@ public class SysLogininforController {
      * @return 列表信息
      */
     @GetMapping(value = "/getAll")
-    @InterfaceLimit
     @PreAuthorize("@ss.hasPermi('auditManager:logininfor:list')")
     public ResponseVO getAll(Integer currentPage, Integer pageSize, String ipaddr, String userName,
                              String status,String startLoginTime,String endLoginTime) {
@@ -79,7 +78,6 @@ public class SysLogininforController {
      * 删除登录信息
      */
     @PostMapping(value = "/delLoginInfo")
-    @InterfaceLimit
     @OperateLog(title = "登录日志", businessType = BusinessType.DELETE,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('auditManager:logininfor:remove')")
     public ResponseVO delLoginInfo(String infoId) {
@@ -104,7 +102,6 @@ public class SysLogininforController {
      * 清空登录信息
      */
     @PostMapping("/cleanLogininfor")
-    @InterfaceLimit
     @OperateLog(title = "登录日志", businessType = BusinessType.CLEAN,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('auditManager:logininfor:remove')")
     public ResponseVO cleanLogininfor() {

+ 0 - 5
backend/src/main/java/com/jiayue/ssi/controller/SysMenuController.java

@@ -39,7 +39,6 @@ public class SysMenuController {
      * 获取菜单列表
      */
     @GetMapping("/list")
-    @InterfaceLimit
     @PreAuthorize("@ss.hasPermi('system:menu:list')")
     public ResponseVO list(SysMenu menu) {
         try {
@@ -61,7 +60,6 @@ public class SysMenuController {
      * 新增菜单
      */
     @PostMapping
-    @InterfaceLimit
     @OperateLog(title = "菜单管理", businessType = BusinessType.INSERT,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('system:menu:add')")
     public ResponseVO add(@RequestBody SysMenu menu) {
@@ -127,7 +125,6 @@ public class SysMenuController {
      * @return 执行结果
      */
     @PutMapping
-    @InterfaceLimit
     @OperateLog(title = "菜单管理", businessType = BusinessType.UPDATE,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('system:menu:edit')")
     public ResponseVO update(@RequestBody SysMenu menu) {
@@ -196,7 +193,6 @@ public class SysMenuController {
      * 根据菜单编号获取详细信息
      */
     @GetMapping(value = "/{getDetailInfo}")
-    @InterfaceLimit
     public ResponseVO getDetailInfo(Long menuId) {
         try {
             SysMenu sysMenu = sysMenuService.selectMenuById(menuId);
@@ -212,7 +208,6 @@ public class SysMenuController {
      * 删除菜单信息
      */
     @DeleteMapping
-    @InterfaceLimit
     @OperateLog(title = "菜单管理", businessType = BusinessType.DELETE,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('system:menu:remove')")
     public ResponseVO delete(String menuId) {

+ 0 - 3
backend/src/main/java/com/jiayue/ssi/controller/SysOperlogController.java

@@ -34,7 +34,6 @@ public class SysOperlogController {
      * @return 列表信息
      */
     @GetMapping(value = "/getAll")
-    @InterfaceLimit
     @PreAuthorize("@ss.hasPermi('auditManager:operlog:list')")
     public ResponseVO getAll(Integer currentPage, Integer pageSize, String title, String operName,String auditType,
                              String businessType, String status,String startOperTime, String endOperTime) {
@@ -83,7 +82,6 @@ public class SysOperlogController {
      * 删除登录信息
      */
     @PostMapping(value = "/delOperlog")
-    @InterfaceLimit
     @OperateLog(title = "操作日志", businessType = BusinessType.DELETE,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('auditManager:operlog:remove')")
     public ResponseVO delOperlog(String operId) {
@@ -108,7 +106,6 @@ public class SysOperlogController {
      * 清空登录信息
      */
     @PostMapping("/cleanOperLog")
-    @InterfaceLimit
     @OperateLog(title = "操作日志", businessType = BusinessType.CLEAN,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('auditManager:operlog:remove')")
     public ResponseVO cleanOperLog() {

+ 1 - 5
backend/src/main/java/com/jiayue/ssi/controller/SysParameterController.java

@@ -36,7 +36,6 @@ public class SysParameterController {
      * @param sysParameter 参数
      * @return 执行结果
      */
-    @InterfaceLimit
     @PostMapping()
     @OperateLog(title = "参数管理", businessType = BusinessType.INSERT,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('system:config:add')")
@@ -85,7 +84,6 @@ public class SysParameterController {
      * @param sysParameter 参数
      * @return 执行结果
      */
-    @InterfaceLimit
     @PutMapping
     @OperateLog(title = "参数管理", businessType = BusinessType.UPDATE,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('system:config:edit')")
@@ -139,7 +137,6 @@ public class SysParameterController {
      * 删除用户信息
      */
     @DeleteMapping
-    @InterfaceLimit
     @OperateLog(title = "参数管理", businessType = BusinessType.DELETE,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('system:config:remove')")
     public ResponseVO delete(String id) {
@@ -171,7 +168,6 @@ public class SysParameterController {
      * @return 参数信息
      */
     @GetMapping(value = "/getAll")
-    @InterfaceLimit
     @PreAuthorize("@ss.hasPermi('system:config:list')")
     public ResponseVO getAll(Integer currentPage, Integer pageSize, String keywords) {
         try {
@@ -198,7 +194,7 @@ public class SysParameterController {
      * @return 邮箱口令
      */
     @GetMapping(value = "/getUseSendMail")
-    @InterfaceLimit
+    @InterfaceLimit(value = 2,time = 1000)
     public ResponseVO getUseSendMail() {
         try {
             String useSendMail = sysParameterService.queryByKey("useSendMail", "true");

+ 0 - 4
backend/src/main/java/com/jiayue/ssi/controller/SysRoleController.java

@@ -57,7 +57,6 @@ public class SysRoleController {
      */
     //    @PreAuthorize("@ss.hasPermi('system:role:list')")
     @GetMapping(value = "/getAll")
-    @InterfaceLimit
     @PreAuthorize("@ss.hasPermi('system:role:list')")
     public ResponseVO getAll(Integer currentPage, Integer pageSize, String roleName, String status, String roleKey) {
         try {
@@ -96,7 +95,6 @@ public class SysRoleController {
      * @param role 角色
      * @return 执行结果
      */
-    @InterfaceLimit
     @PostMapping()
     @OperateLog(title = "角色管理", businessType = BusinessType.INSERT,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('system:role:add')")
@@ -145,7 +143,6 @@ public class SysRoleController {
      * @param role 参数
      * @return 执行结果
      */
-    @InterfaceLimit
     @PutMapping
     @OperateLog(title = "角色管理", businessType = BusinessType.UPDATE,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('system:role:edit')")
@@ -207,7 +204,6 @@ public class SysRoleController {
      * 删除角色
      */
     @PostMapping(value = "/delRole")
-    @InterfaceLimit
     @OperateLog(title = "角色管理", businessType = BusinessType.DELETE,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('system:role:remove')")
     public ResponseVO delRole(String roleId) {

+ 0 - 7
backend/src/main/java/com/jiayue/ssi/controller/SysUserController.java

@@ -47,7 +47,6 @@ public class SysUserController {
      * @return 用户信息
      */
     @GetMapping(value = "/getAll")
-    @InterfaceLimit
     @PreAuthorize("@ss.hasPermi('system:user:list')")
     public ResponseVO getAll(Integer currentPage, Integer pageSize, String username, String phonenumber,
         String status) {
@@ -87,7 +86,6 @@ public class SysUserController {
      * @return 用户信息
      */
     @GetMapping(value = "/getCurrentUser")
-    @InterfaceLimit
     public ResponseVO getCurrentUser() {
         try {
             SysUser sysUser = SecurityContextUtil.getSysUser();
@@ -108,7 +106,6 @@ public class SysUserController {
      * 新增用户
      */
     @PostMapping
-    @InterfaceLimit
     @OperateLog(title = "用户管理", businessType = BusinessType.INSERT,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('system:user:add')")
     public ResponseVO add(@RequestBody SysUser user) {
@@ -235,7 +232,6 @@ public class SysUserController {
      * 初始密码发送邮箱
      */
     @PostMapping(value = "/resetPassword")
-    @InterfaceLimit
     @OperateLog(title = "用户管理", businessType = BusinessType.OTHER,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('system:user:send')")
     public ResponseVO resetPassword(String id) {
@@ -266,7 +262,6 @@ public class SysUserController {
      * 删除用户信息
      */
     @PostMapping(value = "/delUser")
-    @InterfaceLimit
     @AgainVerify
     @OperateLog(title = "用户管理", businessType = BusinessType.DELETE,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('system:user:remove')")
@@ -298,7 +293,6 @@ public class SysUserController {
      * 修改密码
      */
     @PostMapping(value = "/updatePassword")
-    @InterfaceLimit
     @OperateLog(title = "用户管理", businessType = BusinessType.UPDATE,auditType = AuditType.SYS)
     public ResponseVO updatePassword(String id, String oldPassword, String newPassword, String confirmPassword) {
         if (StringUtils.isEmpty(id)) {
@@ -353,7 +347,6 @@ public class SysUserController {
      * 解锁用户信息
      */
     @PostMapping(value = "/relockUser")
-    @InterfaceLimit
     @OperateLog(title = "用户管理", businessType = BusinessType.OTHER,auditType = AuditType.SYS)
     @PreAuthorize("@ss.hasPermi('system:user:relock')")
     public ResponseVO relockUser(String id) {

+ 0 - 2
backend/src/main/java/com/jiayue/ssi/controller/UserLoginController.java

@@ -54,7 +54,6 @@ public class UserLoginController {
      * @throws IOException
      */
     @GetMapping("/getVerifyCode")
-    @InterfaceLimit(value = 5,time = 1000)
     public ResponseVO getVerifyCode(HttpServletResponse httpServletResponse) throws IOException {
         // gif类型
         // GifCaptcha captcha = new GifCaptcha(130, 48);
@@ -120,7 +119,6 @@ public class UserLoginController {
      * @throws IOException
      */
     @PostMapping("/getMailCode")
-    @InterfaceLimit(time=5000)
     public ResponseVO getMailCode(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
         String username = httpServletRequest.getParameter("username");
         // 口令保存到服务器

+ 26 - 0
backend/src/main/java/com/jiayue/ssi/entity/SysBlacklist.java

@@ -0,0 +1,26 @@
+package com.jiayue.ssi.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+* ip黑名单
+*
+* @author xsl
+* @since 2023/04/07
+*/
+@Data
+public class SysBlacklist {
+    /** 主键ID */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /** IP地址 */
+    private String ip;
+    /** ip锁定时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date ipTime;
+}

+ 33 - 4
backend/src/main/java/com/jiayue/ssi/filter/InterfaceLimitFilter.java

@@ -1,10 +1,18 @@
 package com.jiayue.ssi.filter;
 
+import com.jiayue.ssi.constant.CacheConstants;
+import com.jiayue.ssi.entity.SysBlacklist;
+import com.jiayue.ssi.service.SysBlacklistService;
+import com.jiayue.ssi.service.SysLogininforService;
+import com.jiayue.ssi.util.IPUtils;
 import com.jiayue.ssi.util.InterfaceLimitUtil;
 import com.jiayue.ssi.util.ResponseVO;
+import com.jiayue.ssi.util.SpringUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
 import org.springframework.web.filter.OncePerRequestFilter;
 
 import javax.servlet.FilterChain;
@@ -12,6 +20,7 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.util.Date;
 
 /**
  * 接口访问限制过滤器
@@ -22,18 +31,38 @@ import java.io.IOException;
 @RequiredArgsConstructor
 @Order(1)
 @Slf4j
+@Component
 public class InterfaceLimitFilter extends OncePerRequestFilter {
+
     @Override
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
         throws ServletException, IOException {
-        if (!InterfaceLimitUtil.checkInterface(request, 1000, 5)) {
-            log.error("接口拦截:{} 请求超过限制频率【{}次/{}ms】,IP为{}", request.getRequestURI(), 1000, 1, request.getRemoteAddr());
+        String remoteIp = IPUtils.getIpAddr(request);
+        if (CacheConstants.blacklistMap.get(remoteIp)!=null){
             response.setHeader("Access-Control-Allow-Origin", "*");
             response.setStatus(410);
             response.setContentType("text/html;charset=utf-8");
-            response.getWriter().write("请求过于频繁,请稍后再试!");
+            response.getWriter().write("请求过于频繁导致IP被锁定,请联系管理员!");
             return;
         }
-        filterChain.doFilter(request, response);
+        else{
+            if (!InterfaceLimitUtil.checkInterface(request, 1000, 10)) {
+                log.info("接口拦截:{} 请求超过限制频率【{}次/{}ms】,IP为{}", request.getRequestURI(), 10,1000, remoteIp);
+                // 锁定ip黑名单
+                SysBlacklist sysBlacklist = new SysBlacklist();
+                sysBlacklist.setIp(remoteIp);
+                sysBlacklist.setIpTime(new Date());
+                SpringUtils.getBean(SysBlacklistService.class).save(sysBlacklist);
+                // 将锁定ip加入缓存
+                CacheConstants.blacklistMap.put(remoteIp,sysBlacklist.getId());
+
+                response.setHeader("Access-Control-Allow-Origin", "*");
+                response.setStatus(410);
+                response.setContentType("text/html;charset=utf-8");
+                response.getWriter().write("请求过于频繁导致IP被锁定,请联系管理员!");
+                return;
+            }
+            filterChain.doFilter(request, response);
+        }
     }
 }

+ 1 - 0
backend/src/main/java/com/jiayue/ssi/filter/MailCodeFilter.java

@@ -11,6 +11,7 @@ import com.jiayue.ssi.constant.Constants;
 import com.jiayue.ssi.factory.LoginFactory;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
 import org.springframework.web.filter.OncePerRequestFilter;
 
 import com.jiayue.ssi.constant.CacheConstants;

+ 1 - 0
backend/src/main/java/com/jiayue/ssi/filter/VerifyCodeFilter.java

@@ -11,6 +11,7 @@ import com.jiayue.ssi.constant.Constants;
 import com.jiayue.ssi.factory.LoginFactory;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
 import org.springframework.web.filter.OncePerRequestFilter;
 
 import com.jiayue.ssi.constant.CacheConstants;

+ 18 - 0
backend/src/main/java/com/jiayue/ssi/mapper/SysBlacklistMapper.java

@@ -0,0 +1,18 @@
+package com.jiayue.ssi.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jiayue.ssi.entity.SysBlacklist;
+import org.apache.ibatis.annotations.Mapper;
+
+
+/**
+ *  ip黑名单
+ *
+ * @author xsl
+ * @since 2023-03-17
+ */
+@Mapper
+public interface SysBlacklistMapper extends BaseMapper<SysBlacklist> {
+
+}

+ 15 - 0
backend/src/main/java/com/jiayue/ssi/service/SysBlacklistService.java

@@ -0,0 +1,15 @@
+package com.jiayue.ssi.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jiayue.ssi.entity.SysBlacklist;
+
+
+
+/**
+ * 系统访问日志服务类
+ * @author xsl
+ * @date 2023/2/16
+ */
+public interface SysBlacklistService extends IService<SysBlacklist> {
+
+}

+ 18 - 0
backend/src/main/java/com/jiayue/ssi/service/impl/SysBlacklistServiceImpl.java

@@ -0,0 +1,18 @@
+package com.jiayue.ssi.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jiayue.ssi.entity.SysBlacklist;
+import com.jiayue.ssi.mapper.SysBlacklistMapper;
+import com.jiayue.ssi.service.SysBlacklistService;
+import org.springframework.stereotype.Service;
+
+/**
+*
+*
+* @author xsl
+* @since 2023/03/29
+*/
+@Service
+public class SysBlacklistServiceImpl extends ServiceImpl<SysBlacklistMapper, SysBlacklist> implements SysBlacklistService {
+
+}

+ 1 - 3
backend/src/main/java/com/jiayue/ssi/service/impl/UserServiceImpl.java

@@ -1,10 +1,8 @@
 package com.jiayue.ssi.service.impl;
 
-import com.jiayue.ssi.constant.LoginConstants;
+
 import com.jiayue.ssi.service.SysParameterService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.authority.AuthorityUtils;
-import org.springframework.security.core.userdetails.User;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;

+ 2 - 2
backend/src/main/java/com/jiayue/ssi/util/InterfaceLimitUtil.java

@@ -29,9 +29,9 @@ public class InterfaceLimitUtil {
         if (uCount >= value) { // 超过次数,不执行目标方法
             return false;
         } else if (uCount == 0) { // 第一次请求时,设置有效时间
-            uc.put(request.getRemoteAddr(), uCount + 1, ExpirationPolicy.CREATED, time, TimeUnit.MILLISECONDS);
+            uc.put(IPUtils.getIpAddr(request), uCount + 1, ExpirationPolicy.CREATED, time, TimeUnit.MILLISECONDS);
         } else { // 未超过次数, 记录加一
-            uc.put(request.getRemoteAddr(), uCount + 1);
+            uc.put(IPUtils.getIpAddr(request), uCount + 1);
         }
         interfaceLimitMap.put(request.getRequestURI(), uc);
         return true;

+ 1 - 1
backend/src/main/java/com/jiayue/ssi/util/SecurityContextUtil.java

@@ -17,7 +17,7 @@ public class SecurityContextUtil {
     public static SysUser getSysUser(){
         if (SecurityContextHolder.getContext().getAuthentication()==null){
             SysUser sysUser = new SysUser();
-            sysUser.setUsername("test");
+            sysUser.setUsername("system");
             return sysUser;
         }
         return (SysUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

+ 8 - 4
ui/src/permission.js

@@ -17,7 +17,6 @@ router.beforeEach(async (to, from, next) => {
 
   // set page title
   document.title = getPageTitle(to.meta.title)
-
   if (sessionStorage.getItem('token')) {
     if (to.path === '/login') {
       // if is logged in, redirect to the home page
@@ -77,9 +76,14 @@ router.beforeEach(async (to, from, next) => {
       // 在免登录白名单,直接进入
       next()
     } else {
-      // 否则全部重定向到登录页
-      next(`/login?redirect=${to.path}`)
-      NProgress.done()
+      if (to.path === '/404') {
+        next()
+      }
+      else{
+        // 否则全部重定向到登录页
+        next(`/login?redirect=${to.path}`)
+        NProgress.done()
+      }
     }
   }
 })

+ 2 - 0
ui/src/utils/request.js

@@ -166,6 +166,8 @@ service.interceptors.response.use(
           resetRouter()
           break
         case 410:
+          removeToken()
+          router.push('/404')
           Message({
             message: error.response.data,
             type: 'error',

+ 0 - 3
ui/src/views/404.vue

@@ -9,9 +9,6 @@
       </div>
       <div class="bullshit">
         <div class="bullshit__oops">OOPS!</div>
-        <div class="bullshit__info">All rights reserved
-          <a style="color:#20a0ff" href="https://wallstreetcn.com" target="_blank">wallstreetcn</a>
-        </div>
         <div class="bullshit__headline">{{ message }}</div>
         <div class="bullshit__info">Please check that the URL you entered is correct, or click the button below to return to the homepage.</div>
         <a href="" class="bullshit__return-home">Back to home</a>

+ 1 - 1
ui/src/views/sysManager/userManager/index.vue

@@ -323,7 +323,7 @@ export default {
       }).catch((error) => {
         // this.$message.error(error)
       })
-    },1000),
+    },0),
     // 用户状态修改
     handleStatusChange(row) {
       let text = row.status === "0" ? "启用" : "停用";