`

域名绑定在nginx上反代tomcat之shiro过滤器上下文处理

 
阅读更多

 域名绑在nginx上,又反代了tomcat

又想以域名直接访问web应用

shiro在处理过程中,用了如下代码

public final void renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response) throws IOException {
        StringBuilder targetUrl = new StringBuilder();
        if(this.contextRelative && this.getUrl().startsWith("/")) {
            targetUrl.append(request.getContextPath());
        }

        targetUrl.append(this.getUrl());
        this.appendQueryProperties(targetUrl, model, this.encodingScheme);
        this.sendRedirect(request, response, targetUrl.toString(), this.http10Compatible);
    }

默认登录拦截contextRelatie=true

导致tomcat每次取出了应用名xxx

但需求是通过域名直接访问应用,且域名不能绑tomcat那台机器,只能绑在nginx上。

nginx反代配置则必须如下(IP:PORT请自定义)

location ^~ / {
    proxy_pass http://10.10.10.10:8080/xxx/;
    proxy_set_header Host $host:80;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For  $remote_addr;
    proxy_set_header Via "nginx";
    break;
}

 那么由于shiro上面一段代码,会跳转到

http://www.域名.com/xxx/login.html

实际地址变成了http://10.10.10.10:8080/xxx/xxx/login.html

多了一层xxx

怎么解决这个问题呢,解决方案是重写Filter,以下是我重写的一个Filter,仅供参考

import org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter;
import org.apache.shiro.web.util.WebUtils;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

/**
 * Created by jdkleo on 2017/2/10.
 */
public class PanyAuthcFilter extends PassThruAuthenticationFilter {
    @Override
    protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
        if(this.isLoginRequest(request, response)) {
            return true;
        } else {
            this.saveRequest(request);
            String via = ((HttpServletRequest)request).getHeader("Via");
            if (via != null && "nginx".equals(via.toLowerCase())){//如果是nginx,就不需要contextRelative上下文关系
                WebUtils.issueRedirect(request, response, this.getLoginUrl(),null,false);
            }else {
                WebUtils.issueRedirect(request, response, this.getLoginUrl());
            }
            return false;
        }
    }
}

 

 

 

 

分享到:
评论

相关推荐

    windows下配置nginx反向代理tomcat

    通过以上步骤,你可以在 Windows 系统上成功配置 Nginx 作为 Tomcat 的反向代理,并实现基本的功能需求。此外,还可以根据具体的应用场景进一步优化配置文件,比如添加 SSL 支持、设置缓存策略等。

    nginx实现Tomcat反向代理

    在IT行业中,尤其是在服务器部署和优化领域,Nginx与Tomcat的组合是常见的解决方案,因为它们各自在处理不同类型的请求上具有优势。Nginx以其高性能、低资源消耗著称,适合处理静态内容和反向代理任务;而Tomcat作为...

    一分钟搞定 Nginx反向代理 nginx域名代理

    同一ip(都是80端口)可以绑定无数个域名 配置简单 里面包含一个配置文档:配置文档.doc 看一遍 大部分人都会设置了。 内容如下: NGNIX配置文档 1.解压文件到相应文件夹下(我解压到D:/下) (这里是图片) 目录...

    nginx+tomcat shiro实现多tomcat下session共享

    "nginx+tomcat shiro实现多tomcat下session共享"这一主题,就是探讨在这样的架构中,如何有效管理和共享session。 1. **Nginx的作用**: Nginx是一个高性能的HTTP和反向代理服务器,常用于负载均衡,可以将用户的...

    Tomcat基于memcached的session保持-nginx反代

    最后,在主机 A 上安装并配置 Nginx 作为反向代理,负责将请求转发给 Tomcat 集群中的任意一个实例。首先,安装 Nginx: ```bash sudo yum install nginx ``` 接着,编辑 Nginx 的配置文件,定义上游服务器组 `...

    Nginx+KeepAlived+Tomcat负载架构

    ### Nginx+KeepAlived+Tomcat负载架构详解 #### 一、概述 随着互联网应用的日益增多,单一服务器已经难以满足高并发、高可用性的需求。因此,越来越多的企业开始采用集群技术来提高系统的稳定性和扩展性。本文将...

    nginx+tomcat多域名配置

    在IT行业中,构建一个能够处理多个域名的服务器架构是非常常见的需求。"nginx+tomcat多域名配置"就是一种高效且灵活的解决方案,它结合了Nginx作为前端反向代理服务器和Tomcat作为后端应用服务器的优势。下面将详细...

    Windows nginx +多个 tomcat 配置

    在 nginx 的配置文件中,需要添加 upstream 块,指定多个 Tomcat 服务器,并将请求分配到这些服务器上。 4. 配置 Tomcat 在 Tomcat 的配置文件中,需要修改 server.xml 文件,指定端口和其他配置。 nginx 配置...

    nginx+tomcat反向代理安装配置

    `nginx`作为一款高性能的反向代理服务器和负载均衡器,常用于处理静态资源,而`tomcat`则作为Java应用服务器,主要负责运行Java Web应用。下面我们将详细探讨`nginx1.6`的安装、`tomcat7`的安装以及它们之间的反向...

    nginx负载均衡 nginx+tomcat tomcat实现负责均衡

    ### Nginx与Tomcat实现负载均衡的知识点详解 #### Nginx简介及特性 Nginx是一款由Igor Sysoev开发的高性能HTTP服务器和反向代理服务器,以其出色的稳定性和低系统资源消耗而著称。最初是为俄罗斯访问量排名第二的...

    Nginx+keepalived+tomcat实现性负载均衡(包含需要的包)

    2. 安装Tomcat:部署多个Tomcat实例,每个实例运行在不同的端口上,以处理来自Nginx的请求。 3. 安装keepalived:解压`keepalived-1.2.22.tar.gz`,编译安装,并配置keepalived的配置文件,指定虚拟IP、主备Nginx...

    nginx_https+tomcat_http配置.docx

    正确配置后,用户可以通过HTTPS协议访问部署在Tomcat上的应用,提高了安全性。此外,通过调整Nginx的配置参数,还可以进一步优化性能和稳定性。希望这些信息能帮助您顺利完成Nginx与Tomcat的集成配置。

    TOMCAT多域名绑定

    通过学习和实践这些知识点,开发者可以有效地管理和优化在Tomcat上的多域名环境,提高网站的可扩展性和管理效率。对于大型企业或拥有多个在线服务的开发者来说,理解并掌握这些技术是至关重要的。

    Nginx反向代理Tomcat服务器.pdf

    综上所述,Nginx作为反向代理与Tomcat服务器结合使用,可以实现Web应用的高并发处理和负载均衡。这种组合在生产环境中非常常见,能够有效地提高服务的稳定性和性能。在部署和配置时需要综合考虑操作系统、应用服务器...

    Nginx+Redis+Tomcat 集群部署

    3. 配置Tomcat集群:确保每台Tomcat服务器上的应用配置一致,包括应用上下文路径、session复制等,以保证在不同服务器间切换时的会话一致性。 4. 部署应用:将Java Web应用打包成WAR文件,分别部署到每台Tomcat...

    Nginx++Keepalived+Tomcat负载均衡&动静分离

    在调度器服务器上,需要安装Nginx和Keepalived软件包。首先,需要安装编译工具和插件,然后添加nginx用户和组,解压Nginx安装包,编译和安装Nginx。接着,需要配置Nginx主配置文件,包括worker_processes、error_log...

    linux下Nginx+tomcat整合的安装与配置

    在现代的Web服务器架构中,Nginx作为高性能的反向代理服务器和负载均衡器,常被用来与Tomcat等应用服务器配合使用,以提高网站的响应速度、稳定性和安全性。本文将详细解析在Linux环境下如何安装和配置Nginx与Tomcat...

    Docker-Compose部署nginx代理Tomcat集群

    在本场景中,我们的目标是创建一个Nginx容器作为负载均衡器,以及多个Tomcat容器作为应用服务器。以下是关键步骤: 1. **编写docker-compose.yml文件**:这个文件会定义我们的服务、网络和卷。例如: ```yaml ...

    Nginx+tomcat+redis

    在构建高性能、高可用性的Web服务时,"Nginx+Tomcat+Redis"的组合是一种常见的架构模式。这个架构充分利用了每个组件的优势,以实现高效的数据处理、动态内容渲染和负载均衡。以下是对这套技术栈的详细解释: 1. **...

    Nginx+tomcat配置集群负载均衡实例

    由于Tomcat处理动态内容的能力较强,但在处理静态资源时效率较低,因此通常与Nginx配合使用,让Nginx负责静态资源,Tomcat处理动态请求。 配置Nginx+Tomcat集群负载均衡的第一步是安装Nginx和多个Tomcat实例。在多...

Global site tag (gtag.js) - Google Analytics