当前位置:论坛首页 > Windows面板 > 求助

【已解答】springboot项目里面有个登录拦截器,我使用nginx...

发表在 Windows面板2023-8-16 19:27 [复制链接] 1 1322

为了能快速了解并处理您的问题,请提供以下基础信息:
面板、插件版本:

系统版本:

问题描述:springboot项目里面有个登录拦截器,我使用nginx的负载均衡,切换端口会出错我该怎么解决这个问题

相关截图(日志、错误):

nginx文件:
worker_processes auto;
worker_rlimit_nofile 51200;
events
{
        worker_connections 51200;
        multi_accept on;
}
http {
                include       mime.types;
                #include luawaf.conf;
                include proxy.conf;
        default_type  application/octet-stream;

        server_names_hash_bucket_size 512;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile   on;
        tcp_nopush on;

        keepalive_timeout 60;

        tcp_nodelay on;

        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;
                fastcgi_intercept_errors on;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6]\.";

        limit_conn_zone $binary_remote_addr zone=perip:10m;
                limit_conn_zone $server_name zone=perserver:10m;

        server_tokens off;
        access_log off;

   upstream blog{

        server localhost:8081 ;
        server localhost:8082 ;
}
    server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
        proxy_pass http://blog;
            root   html;
            index  index.html index.htm;
        }
                location /nginx_status {  
                allow 127.0.0.1;
            deny all;
            stub_status on;  
            access_log  off;  
        }  
    }
    include vhost/*.conf;
    #加载vhost目录下的虚拟主机配置文件
}
拦截器:
package com.cyx.cyxdeboke.interceptor;

import com.cyx.cyxdeboke.Entity.Admin;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

//拦截器
@Component
public class AdminLoginInterceptor implements HandlerInterceptor {
    /***
     * 在请求处理之前进行调用(Controller方法调用之前)
     */
@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("执行了拦截器的preHandle方法");
        
        try {
            HttpSession session = request.getSession();
            //统一拦截(查询当前session是否存在admin(这里admin会在每次登录成功后,写入session)
Admin admin = (Admin) session.getAttribute("admin");
            if (admin != null) {
                return true;
            }
            response.sendRedirect(request.getContextPath() + "index");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return true;
        //如果设置为false时,被请求时,拦截器执行到此处将不会继续操作
//如果设置为true时,请求将会继续执行后面的操作
}

    /***
     * 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
*/
@Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("执行了拦截器的postHandle方法");
    }

    /***
     * 整个请求结束之后被调用,也就是在DispatchServlet渲染了对应的视图之后执行(主要用于进行资源清理工作)
*/
@Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("执行了拦截器的afterCompletion方法");
    }
}


使用道具 举报 只看该作者 回复
发表于 2023-8-17 09:25:53 | 显示全部楼层
您好,您那边调整下您负载均衡的设置,调整使用ip_hash策略。它会根据客户端IP地址将相同IP的请求定向到同一台后端服务器,这样就能避免登录状态在不同服务器之间的切换问题。当用户登录后,会话信息保存在后端服务器上,如果后续请求切换到了另一台服务器上,可能会导致会话丢失或登录状态无效。
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

立即付费处理

工作时间:09:00至24:00

快速回复 返回顶部 返回列表