我HttpsUrlConnection通过使用Authenticator和设置默认Authenticator对象使用基本身份验证,如下所示:
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user", "userpass"
.toCharArray());
}
});
Run Code Online (Sandbox Code Playgroud)
当我访问我的Web服务时,连接调用我的getPasswordAuthentication()方法来获取凭据并将其发送到Web服务器.只要密码正确,这就可以正常工作.:)
然而,恰巧有人在Web服务器上更改了基本身份验证密码,然后我的请求没有返回.
我调试了它,发生的事情是我getInputStream()永远不会回来.该HttpsUrlConnection确实得到了401响应,并在内部再次得到相同的凭据反应这一点.但由于我只提供了一个用户和密码,这将再次失败(并再次......).
所以我的问题是:我怎样才能防止这种情况以及哪里有一个钩子来对错误的密码做出反应(分别是401响应)所以我可以显示一条相应的错误信息并取消请求?
以下是重复调用的方法的堆栈跟踪的摘录HttpsUrlConnection:
1: MyOwnHttpConnection$3.getPasswordAuthentication() line: 99
2: Authenticator.requestPasswordAuthentication(InetAddress, int, String, String, String) line: 162
3: HttpsURLConnectionImpl$HttpsEngine(HttpURLConnectionImpl).getAuthorizationCredentials(String) line: 1205
4: HttpsURLConnectionImpl$HttpsEngine(HttpURLConnectionImpl).processAuthHeader(String, String) line: 1178
5: HttpsURLConnectionImpl$HttpsEngine(HttpURLConnectionImpl).processResponseHeaders() line: 1118
6: HttpsURLConnectionImpl$HttpsEngine(HttpURLConnectionImpl).retrieveResponse() line: 1044
7: HttpsURLConnectionImpl$HttpsEngine(HttpURLConnectionImpl).getInputStream() line: 523
8: HttpsURLConnectionImpl.getInputStream() line: 283
Run Code Online (Sandbox Code Playgroud) 在我的基于JSF 2的应用程序中,我有一个包含(在其他UI组件中)一些复选框的表单.
在复选框上,我已经注册了在检查时触发的ajax请求.ajax请求实际上只会更新辅助bean中另一个复选框的值.因此,还将检查另一个复选框(当它被重新渲染时 - 因为它将在渲染响应阶段中从辅助bean获取更新的值).
这样可以正常工作,直到提交整个表单并发生验证错误.然后,ajax请求仍然可以工作并更改辅助bean上的值,但是在重新呈现更新的复选框的阶段,它的值不是从辅助bean中获取的,而是来自从ComponentStateHelper类中获取的缓存值.
据我所知,这用于JSF 2的新功能,只存储对组件树的部分更改.
我不明白的是:这与验证阶段有什么关系?StateHelper当验证发现错误时,为什么我的复选框的类中有缓存值?
我正在尝试将 liquibase 与我们的应用程序集成。我正在使用 Maven 集成方法执行它。
当我执行时,我看到 databasechangelog 的创建脚本被调用了两次并得到“表已经存在”错误。以下是来自控制台的语句。我正在使用 liquibase-core-3.1.1 jar。
INFO 2014-04-28 06:49:liquibase: Successfully acquired change log lock
INFO 2014-04-28 06:49:liquibase: Creating database history table with name: databasechangelog
INFO 2014-04-28 06:49:liquibase: ChangeSet src/main/resources/sql/postGre/db.changelog-2.0.xml::1::fms ran successfully in 555ms
INFO 2014-04-28 06:49:liquibase: Creating database history table with name: databasechangelog
SEVERE 2014-04-28 06:49:liquibase: Error executing SQL CREATE TABLE databasechangelog (ID VARCHAR(63) NOT NULL, AUTHOR VARCHAR(63) NOT NULL, FILENAME VARCHAR(200) NOT NULL, DATEEXECUTED TIMESTAMP WITH TIME ZONE NOT NULL, ORDEREXECUTED INT NOT NULL, EXECTYPE …Run Code Online (Sandbox Code Playgroud) 在我的JSF webApp中,我将所有资源(js, css, img)放入一个版本化的库中,正如BalusC在这个答案中指出的那样.
现在我favicon也住在这里:
resources --> default --> 1_1 --> img --> favicon.ico
Run Code Online (Sandbox Code Playgroud)
根据这个答案,添加favicon的方式是:
<link rel="shortcut icon"
type="image/x-icon" href="#{request.contextPath}/resources/default/1_1/img/favicon.ico"/>
Run Code Online (Sandbox Code Playgroud)
但是这样会忽略从最高版本文件夹(例如1_1)自动选择文件的资源处理,我每次都必须手动更改.
那么还有另一种方法来包含favicon,还是将favicon放在别处(在版本库之外)?
Jboss 7.0(默认情况下)配置为通过在standalone.xml以下位置定义来限制对本地IP的访问:
<interfaces>
<interface name="public">
<inet-address value="127.0.0.1"/>
</interface>
</interfaces
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过以下方式将其更改为公开提供给所有ips:
<interfaces>
<interface name="public">
<any-address/>
</interface>
</interfaces
Run Code Online (Sandbox Code Playgroud)
但是,我如何才能将此限制为仅限本地IP,例如所有以10.x.x.x?开头的IP地址?