我正在开发一个Wicket GAE应用程序,一切看起来都很好。但我有一个问题,如何正确地将GAE的安全性与Wicket相结合?
我有两个与安全相关的用例:
第二个我猜我可以通过“隐藏”表格和/或行动(其他建议是受欢迎的)。第一个我找不到怎么做。
GAE指示使用基于servlet的身份验证或某些API调用,通过返回链接重定向到Google的身份验证。我想这适用于Wicket的重定向,但不应该是401重定向吗?而且,更重要的是:如何测试它?
如果我使用Wicket的安全性,如何定义用户可以访问的页面以及如何发送给Google的身份验证?
答案 0 :(得分:0)
visural-wicket库的安全功能(完全披露 - 这是我的开源项目)可能允许您正在寻找的集成。
这篇博客文章解释了基本机制 -
http://www.richardnichols.net/2011/09/securing-wicket-with-visural-wicket/
您可以使用他们的UserService集成Google的安全性,以返回包含Google用户的IClient -
public class GoogleUser implements IClient<String> {
private final User user;
private final boolean admin;
public GoogleUser(User user, boolean admin) {
this.user = user;
}
public String getId() {
return user.getUserId();
}
public User getUser() {
return user;
}
public boolean isAdmin() {
return admin;
}
}
public class MyApp extends Application {
public void init() {
// ...
getSecuritySettings().setAuthorizationStrategy(new com.visural.wicket.security.AuthorizationStrategy(new IClientProvider() {
public IClient getCurrentClient() {
UserService s = UserServiceFactory.getUserService();
return new GoogleUser(s.getCurrentUser(), s.isUserAdmin());
}
}));
// ...
}
}
然后,您可以在您的网页或组件中实现安全性 -
public class MyPage extends WebPage implements ISecureRenderInstance {
// ...
public IPrivilege getRenderPrivilege() {
return new IPrivilege<GoogleUser>() {
public boolean isGrantedToClient(GoogleUser client) {
return client != null && client.isAdmin()
}
};
// instead of returning a anonymous class like this, you could also
// package up common privileges into a singleton instance,
// e.g. return Privilege.ADMIN;
}
}