我有以下情况:
服务器:码头(已配置JAAS)
客户端:Jersey通过JUnit调用(通过Maven)
我在Web服务器中设置了JAAS。我正在使用客户端部分作为测试。
在服务器端,用户通过具有JAAS处理的基本身份验证的表单进行身份验证。显然,用户必须先经过身份验证才能查看某些页面。
我希望能够在尝试访问安全页面之前通过泽西岛登录。如何才能做到这一点?我已经检查过您可以定义一个过滤器,但是我不确定如何使用它。并且-
一旦用户通过表单登录,我如何才能(从客户端)转到我真正感兴趣的页面?
如果有人可以向我展示一个如何使用Jersey在客户端进行此操作的示例,我将非常感激。
我有以下JUnit测试用例方法:
@Test
public void testLogin()
throws IOException
{
String URL_LOGIN = "http://localhost:9080/foo/auth.html";
Client client = Client.create();
String username = "me";
String password = "me";
final HTTPBasicAuthFilter authFilter = new HTTPBasicAuthFilter(username, password);
client.addFilter(authFilter);
client.addFilter(new LoggingFilter());
WebResource webResource = client.resource(URL_LOGIN);
// I even tried:
// webResource.header("Authorization", "Basic " + "base64encoded_userid:password").type("application/xml");
String page = webResource.post(String.class);
System.out.println(page);
}
请注意:
1)http:// localhost:9080 / foo /
auth.html
是成功通过身份验证后应该看到的页面。
2)我实际上看到了http:// localhost:9080 / foo /
login.html的输出。
3)显然,通过浏览器,我可以通过login.html页面成功登录。
我似乎在这里错过了什么?
使用基本身份验证,您根本不需要进入任何登录页面。如果服务器配置为使用基本身份验证,那么如果在请求中包含基本身份验证标头,则可以向任何受保护的页面发出请求。Jersey过滤器可以解决这一问题。因此,如果基本身份验证确实是服务器正在使用的身份,那么您的代码应该可以工作。
鉴于它不起作用以及它不起作用的方式,我很确定服务器已配置为使用基于表单的身份验证,而不是基本身份验证。
为了使基于表单的身份验证有效,您必须发送包含表单数据(包括用户名和密码)的发布请求才能登录,然后将您从服务器收到的Cookie设置为后续请求(因为服务器-
一旦登录, in-将设置会话cookie)。
看一下login.html的样子-它应该包含一个表单。如果使用的是标准servlet表单身份验证,则该表单的操作URL应该为“
j_security_check”,并且应该有两个表单参数:j_username和j_password。如果是这样,您可以尝试以下操作:
String URL_LOGIN = "http://localhost:9080/foo/j_security_check";
String URL_DATA = "http://localhost:9080/foo/auth.html";
Client client = Client.create();
// add a filter to set cookies received from the server and to check if login has been triggered
client.addFilter(new ClientFilter() {
private ArrayList<Object> cookies;
@Override
public ClientResponse handle(ClientRequest request) throws ClientHandlerException {
if (cookies != null) {
request.getHeaders().put("Cookie", cookies);
}
ClientResponse response = getNext().handle(request);
// copy cookies
if (response.getCookies() != null) {
if (cookies == null) {
cookies = new ArrayList<Object>();
}
// A simple addAll just for illustration (should probably check for duplicates and expired cookies)
cookies.addAll(response.getCookies());
}
return response;
}
});
String username = "me";
String password = "me";
// Login:
WebResource webResource = client.resource(URL_LOGIN);
com.sun.jersey.api.representation.Form form = new Form();
form.putSingle("j_username", username);
form.putSingle("j_password", password);
webResource.type("application/x-www-form-urlencoded").post(form);
// Get the protected web page:
webResource = client.resource(URL_DATA);
String response = webResource.get(String.class);
我尚未对此进行测试,因此可能会有一些错别字或错误。
我是新泽西Restful web服务和Spring Security的新bie。
问题内容: 我正在开发一个使用Jersey框架的REST应用程序。我想知道如何控制用户身份验证。我搜索了很多地方,最近的文章是:http : //weblogs.java.net/blog/2008/03/07/authentication- jersey 。 但是,本文只能与GlassFish服务器和附加数据库一起使用。无论如何,在到达请求的REST资源之前,我是否可以在Jersey中实现一个接
下面是示例代码:https://code.google.com/p/google-api-dotnet-client/wiki/oauth2#service_accounts 授权失败:dotnetOpenAuth.Messaging.ProtocolException:发送直接消息或获取响应时出错。 内部异常是System.net.WebException:远程服务器返回错误:(400)Bad
我已经将我的Kafka jaas配置设置为Spring引导应用程序中的外部bean,以便从application.yaml文件中读取我的配置。 但是,从yaml文件读取jaas密钥表文件时,我遇到了一个错误。 面临错误 这就是我配置jaas的方式 KafkaJaasConfigurationProperty.java 应用yml 配置Bean.java 任何帮助将不胜感激。谢谢!
问题内容: 我正在编写一个要求用户登录的Spring Web应用程序。我公司有一个Active Directory服务器,我想将其用于此目的。但是,我在使用Spring Security连接服务器时遇到了麻烦。 我正在使用Spring 2.5.5和Spring Security 2.0.3,以及Java 1.6。 如果我将LDAP URL更改为错误的IP地址,它不会引发异常或任何异常,因此我想知道
问题内容: 我尝试阅读尽可能多的不同答案和帖子,但是我仍然不能完全满足自己的需求。我正在尝试找出处理用户身份验证,登录等的最佳方法(最有效,但大多数情况下更安全)。 我有一个运行在Express上的Node.js服务器;我有一个Angular.js网络应用程序;而且我有一个iOS应用。我使用Express /Node.js公开了RESTful API。 我读到的第一件事是使用cookie,并在服务