Java 当用户尝试通过HTTP连接时,发回HTTP响应而不是stck跟踪

Java 当用户尝试通过HTTP连接时,发回HTTP响应而不是stck跟踪,java,rest,jetty,Java,Rest,Jetty,我有一个Jetty服务器,并且我已经禁用了通过rest服务的HTTP连接,因此客户端连接只能通过https进行,但是当客户端尝试通过HTTP进行连接时,它会抛出一个SocketException并将其视为rest响应。我想做的是在发生这种情况时给出一个响应,并实际抛出一个自定义的描述性错误您可能需要像这样使用一个过滤器 public abstract class SSLOnlyFilter implements Filter { public void doFilter(ServletRe

我有一个Jetty服务器,并且我已经禁用了通过rest服务的HTTP连接,因此客户端连接只能通过https进行,但是当客户端尝试通过HTTP进行连接时,它会抛出一个SocketException并将其视为rest响应。我想做的是在发生这种情况时给出一个响应,并实际抛出一个自定义的描述性错误

您可能需要像这样使用一个
过滤器

public abstract class SSLOnlyFilter implements Filter {

  public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)  {
    // ... cast to HTTP counterparts
    if (request.isSecure()) {
      chain.doFilter(request, response);
    } else {
      response.setStatus(HttpServletResponse.SC_OK);
      // Set the message in the body
    }
  } 
}
或自定义错误页(不太首选)

或者,您可以使用

公共抽象类SSLOnlyFilter实现过滤器{
公共无效doFilter(ServletRequest-req、ServletResponse-resp、FilterChain链){
//转换为HTTP请求和响应
if(request.isSecure()){
链式过滤器(请求、响应);
}否则{
response.setStatus(HttpServletResponse.SC_永久移动);
//使用实际参数编辑此行。注意HTTPS
response.setHeader(“位置”https://host:port/url");
}
} 
}

@ThaSaleni您可以使用
过滤器或重写模块发出
HTTP
重定向。查看更新的答案我不认为您理解我的问题,我不想将通过http的连接重定向到https,但我阻止了http(即当您尝试连接到http时引发套接字异常)这一切都很好,但我想捕捉这个异常,并向客户发送更具描述性的响应查看
过滤器
解决方案。您的筛选器将返回
200 OK
,并在响应正文中提供错误描述。@ThaSaleni您的问题应该更清楚,并提供尽可能多的详细信息。查看我的更新
<error-page>
   <exception-type>java.net.SocketException</exception-type>
   <location>/someServletHere</location>
</error-page>
<New id="Rewrite" class="org.eclipse.jetty.rewrite.handler.RewriteHandler">
  <Call name="addRule">
    <Arg>
      <New class="org.eclipse.jetty.rewrite.handler.RedirectRegexRule">
        <Set name="regex">/(.+)</Set>
        <Set name="replacement">https://host:port/$1</Set>
      </New>
    </Arg>
  </Call>
</New>