我有以下场景:
服务器:Jetty(配置JAAS)
客户端:通过JUnit调用Jersey(通过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);
}
Run Code Online (Sandbox Code Playgroud)
请注意:
1)http:// localhost:9080/foo/auth.html是我应该在成功验证后看到的页面.
2)我实际上看到了http:// localhost:9080/foo/login.html的输出.
3)显然,通过浏览器,我可以通过login.html页面成功登录.
我似乎错过了什么?
我正在我的应用程序和MySQL 之间使用Jersey开发Restful Web ServiceAndroid, iPhone.我还Hibernate用来将数据映射到数据库.
我有一个sessionId(键).它是在用户登录系统时生成的.
在User课堂上:
public Session daoCreateSession() {
if (session == null) {
session = new Session(this);
} else {
session.daoUpdate();
}
return session;
}
Run Code Online (Sandbox Code Playgroud)
在Session课堂上:
Session(User user) {
this.key = UUID.randomUUID().toString();
this.user = user;
this.date = new Date();
}
void daoUpdate() {
this.key = UUID.randomUUID().toString();
this.date = new Date();
}
Run Code Online (Sandbox Code Playgroud)
当用户成功登录系统时,我将此sessionId发送到移动应用客户端.然后,当我想根据登录用户从数据库中获取一些信息时,我将此会话密钥作为in the REST Services每个请求的身份验证.
例如,对于用户参与的项目列表,我使用 client.GET(SERVER_ADDRESS/project/get/{SessionID})
不确定的client.GET(SERVER_ADDRESS/project/get/{username}).
如果它不是有效的会话密钥,我将向客户端发送403禁止代码.你也可以看看这里 …