让我首先说这是工作昨天,所以我完全不明白为什么它停止工作所有突然。而Java/插件真的不是我的专长。
我正在开发一个应用程序,它可以对另一个域上的服务器进行POST和GET调用。这是一个Maven项目。为了避免跨源问题,我有一个HttpProxy.ProxyServlet插件。
我将在这里列出所有的工作peics,但基本上问题和错误都在这篇文章的底部总结出来。
pom.xml
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mitre.dsmiley.httpproxy</groupId>
<artifactId>smiley-http-proxy-servlet</artifactId>
<version>1.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<!-- War plugin below is required for above plugin to build project without errors. http://stackoverflow.com/questions/7539970/cannot-construct-org-apache-maven-plugin-war-util-webappstructure-as-it-does-not-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
</plugin>
</plugins>
web.xml
第二个servlet部分就是我们要讨论的部分。我只发布第一个,因为第一个工作良好。供参考。
<servlet>
<servlet-name>ad_auth</servlet-name>
<servlet-class>org.mitre.dsmiley.httpproxy.ProxyServlet</servlet-class>
<init-param>
<param-name>targetUri</param-name>
<param-value>${authserver}/aaenroll/rest/authContext</param-value>
</init-param>
<init-param>
<param-name>log</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ad_auth</servlet-name>
<url-pattern>/adauth</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>user_profile</servlet-name>
<servlet-class>org.mitre.dsmiley.httpproxy.ProxyServlet</servlet-class>
<init-param>
<param-name>targetUri</param-name>
<param-value>${authserver}/aaenroll/rest/userProfile/userName/{_username}.json?user={_username}</param-value>
<!--<param-value>${authserver}/aaenroll/rest/userProfile/userName/segotac.json?user=segotac</param-value>-->
</init-param>
<init-param>
<param-name>log</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>user_profile</servlet-name>
<url-pattern>/userProfile</url-pattern>
</servlet-mapping>
Javascript Ajax调用
function checkEnrollment() {
var username = Cookies.get('username');
var authToken = Cookies.get('authToken');
$.ajax({
type: "GET",
beforeSend: function(request)
{
request.setRequestHeader("Authorization", authToken);
},
url: "userProfile?_username=" + username, //**PROBLEM HERE** -> Url intercepted by servlet plugin. Full path mapping is available in web.xml. As per the Plugin syntax, param _username will replace all "{_username}" in web.xml userProfile targetUri param-values.
success: function(msg, success) {
window.location.replace("enroll.jsp");
},
error: function(xhr, ajaxOptions, thrownError) {
console.log('false Enrollment');
}
});
关于在上面传入的截获URL如何位于此链接底部的语法。也就是插件。又一次...昨天还在工作...https://github.com/mitre/http-proxy-servlet
终于。错误:
<html><head><title>Apache Tomcat/7.0.39 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 500 - Trying to process targetUri init parameter: java.net.URISyntaxException: Illegal character in path at index 71: http://cslxintwebdev3.csmc.edu:8087/aaenroll/rest/userProfile/userName/{_username}.json?user={_username}</h1><HR size="1" noshade="noshade"><p><b>type</b> Exception report</p><p><b>message</b> <u>Trying to process targetUri init parameter: java.net.URISyntaxException: Illegal character in path at index 71: http://cslxintwebdev3.csmc.edu:8087/aaenroll/rest/userProfile/userName/{_username}.json?user={_username}</u></p><p><b>description</b> <u>The server encountered an internal error that prevented it from fulfilling this request.</u></p><p><b>exception</b> <pre>javax.servlet.ServletException: Trying to process targetUri init parameter: java.net.URISyntaxException: Illegal character in path at index 71: http://cslxintwebdev3.csmc.edu:8087/aaenroll/rest/userProfile/userName/{_username}.json?user={_username}
org.mitre.dsmiley.httpproxy.ProxyServlet.initTarget(ProxyServlet.java:156)
org.mitre.dsmiley.httpproxy.ProxyServlet.init(ProxyServlet.java:140)
javax.servlet.GenericServlet.init(GenericServlet.java:160)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:722)
null
根本原因
java.net.URISyntaxException: Illegal character in path at index 71: http://example.com:8087/aaenroll/rest/userProfile/userName/{_username}.json?user={_username} java.net.URI$Parser.fail(URI.java:2829) java.net.URI$Parser.checkChars(URI.java:3002) java.net.URI$Parser.parseHierarchical(URI.java:3086) java.net.URI$Parser.parse(URI.java:3034) java.net.URI.<init>(URI.java:595) org.mitre.dsmiley.httpproxy.ProxyServlet.initTarget(ProxyServlet.java:154) org.mitre.dsmiley.httpproxy.ProxyServlet.init(ProxyServlet.java:140) javax.servlet.GenericServlet.init(GenericServlet.java:160) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) java.lang.Thread.run(Thread.java:722)
null
注意根本原因的完整堆栈跟踪可在Apache Tomcat/7.0.39日志中获得。
null
所以简短的问题是,为什么发送到HttpProxy插件的用户名param没有被正确地拦截和替换?
抱歉,如果这是一种方式,很多信息扔在这里。希望熟悉这些技术的人能够快速识别问题或指出正确的调试路径。
谢谢你!
编辑
web.xml
<servlet-class>org.mitre.dsmiley.httpproxy.URITemplateProxyServlet</servlet-class>
<url-pattern>/userProfile/*</url-pattern>
JS
url: "userProfile?_username=" + username,
错误:
HTTP Status 500 - Missing HTTP parameter _username to fill the template
我知道username在javascript调用中有一个值。变量未正确应用于web.xml中的模板
再次感谢!
这主要是servlet映射的问题。根据文档,我没有看到类proxyServlet
允许参数化的任何迹象(尽管可能允许)。也许您应该改用类UriTemplateProxyServlet
。您可以这样更改servlet定义:
<servlet-class>org.mitre.dsmiley.httpproxy.URITemplateProxyServlet</servlet-class>
<init-param>
<param-name>targetUri</param-name>
<param-value>{authserver}/aaenroll/rest/userProfile/userName/{_username}.json?user={_username}</param-value>
...
和servlet映射本身,(注意'*'):
<servlet-mapping>
<servlet-name>user_profile</servlet-name>
<url-pattern>/userProfile/*</url-pattern>
</servlet-mapping>
那么在您的Ajax中:
...
url: "userProfile/?authserver=" + authserver + "&_username=" + username;
...
因此,我正在阅读uRitemplateProxyServlet
的源代码,我认为它可能需要一个一对一的参数匹配。换句话说,对于targetUri中的每个参数,querystring中必须有一个匹配的参数(即ajax生成的URL)。不幸的是,我不能测试,但你应该能够很快地告诉是否这是事实。
试试看:
/userprofile/*
。“userprofile/subpath?_username=”+username+“&_username2=”+username;
${authserver}/aaenroll/rest/userprofile/username/{_username}.json?user={_username2}
我正试图解决我的Jetty servlet在HTTPS上运行的一个问题。 它在浏览器中显示此错误页: 我所做的: > 我创建了我的Keystore和Truststore,如下所述:如何生成Keystore和Truststore 这两个文件都放在我的项目的目录中,并编写了加载这些文件的代码。 然后,我尝试通过其他指南创建其他密钥库和信任库,例如,我将DNS替代名称添加到我的新密钥库中,如下所述:ht
问题内容: 如何配置用户名和密码以使用Java验证http代理服务器? 我刚刚发现以下配置参数: 但是,我的代理服务器需要身份验证。如何配置我的应用程序以使用代理服务器? 问题答案: (编辑:正如OP所指出的,也需要使用a 。为了正确起见,我相应地更新了我的答案。) (编辑#2:正如另一个答案中指出的那样,在JDK 8中,需要从属性中删除身份验证方案) 对于身份验证,用于设置代理的配置并设置系统属
新手提问: 在使用Vue2的Proxy代理服务器中,出现了以下错误,上网搜后得知是http报文过长。情景是 传输账号和密码,token放在了Authorization中。怎么解决? Proxy error: Could not proxy request /login/match?stn=20240101&stp=[-密码-] from localhost:8080 to http://local
我有一个React前端,它使用jwt与Django后端进行身份验证。后端工作正常,使用django视图连接得很好,但是当我尝试代理React的请求时,它给我一个连接拒绝错误。 代理错误:无法将request/api/auth/token/acture/from localhost:3000代理到http://localhost:8000(ECONNREFUSED)。 连接到http://local
问题内容: 我有2 ng-包括HTML。考虑服务器中是否不存在ng-include src之一。截至目前,它只会加载空白html,并且在浏览器控制台中会显示未找到http-404文件。 因此,在这种情况下,我只想将默认错误页面(服务器中存在)加载到该特定div中,即一半显示默认错误页面,另一部分显示通过nginclude加载的正确div。 我的逻辑是,使用HTTP拦截器拦截所有HTTP调用。无论何
问题内容: 我经历了很多答案,并且在Google上搜索了很多,但仍然找不到为什么我的帖子请求不起作用的原因。 这是我的jsp: 这是我的控制器: 而我的servlet: 我不断收到此Null指针异常 请告诉我我这里做错了什么。 问题答案: 您的请求不包含名为“ data”的URL参数,因此request.getParameter(“data”)返回null,并且您获得NullPointerExce