java代理身份验证IOException未被抛出

时间:2016-12-01 22:09:36

标签: java authentication error-handling proxy ioexception

我正在尝试连接到代理服务器但不提供任何凭据,因此我可以抓住407并告诉用户他们需要提供信用。

我无法在生命中抓住这个错误。

  private void doTunneling(HttpURLConnection conn) {
    try {
        doTunneling.invoke(conn);
    } catch (ReflectiveOperationException x) {
        throw new InternalError("Should not reach here", x);
    }
 }

当我通过代码时,它会将我带到内部错误“不应该听到”。在HttpConnectionSocketImpl.class中

{{1}}

堆栈跟踪指示Io异常并指示需要auth。

我只是不明白为什么我的try catch块在进行连接尝试时没有捕获到这个异常。

引起:java.io.IOException:无法通过代理隧道。代理返回“需要HTTP / 1.1 407代理身份验证(Forefront TMG需要授权才能完成请求。拒绝访问Web代理筛选器。”     在sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:2084)     ......还有19个

2 个答案:

答案 0 :(得分:0)

doTunneling.invoke抛出InvocationTargetException(这是一个ReflectiveOperationException),所以

var gulp = require('gulp');
    jade = require('gulp-jade');
    sass = require('gulp-sass');
    postcss = require('gulp-postcss');
    browserSync = require('browser-sync');
    autoprefixer = require('autoprefixer-core');

gulp.task('sass', function(){
  var processors = [
    autoprefixer
  ];

  return gulp.src('sass/main.scss')
    .pipe(sass())
    .pipe(postcss(processors))
    .pipe(gulp.dest('css'));
});

gulp.task('jade', function() {
  return gulp.src('jade/index.jade')
  .pipe(jade({pretty: true}))
  .pipe(gulp.dest(''));
});

gulp.task('watch', function(){
  browserSync({
    server: {
      baseDir: ''
    }
  });
  gulp.watch('**/*.sass', ['doc-watch']);
  gulp.watch('**/*.jade', ['doc-watch']);
  gulp.watch('**/*.js', ['doc-watch']);
});

gulp.task('doc-watch', ['sass', 'jade'], browserSync.reload);

gulp.task('default', ['doc-watch']);

已执行。

InternalError是一个错误,所以你的

  throw new InternalError

没有抓住它。

作为解决方法,您可以使用       catch(错误e) 但这不是一个好主意。

我认为这是

中的错误
  catch (IOException

其中签名应该使用throws IOException和

进行扩展
java.net.HttpConnectSocketImpl.doTunneling(HttpURLConnection)
如果是IOException,则应抛出

(例如java.io.IOException:无法通过代理进行隧道传输。代理返回“需要HTTP / 1.0 407代理身份验证”)

替换单行

socket.connect(addr,getUrlConnectTimeout());

java.lang.reflect.InvocationTargetException.getTargetException()

应该给出预期的IOException。

答案 1 :(得分:0)

该错误已被接受,将在更高版本的JDK中解决。请参阅https://bugs.openjdk.java.net/browse/JDK-8173620