我使用Wicket 7并将 AuthenticatedWebSession 扩展为名为 BasicAuthenticatedSession 的类。虽然我这样做,但我想添加一个返回有关经过身份验证的用户的其他信息的方法。
在 BasicAuthenticatedSession#authenticate 中,我得到一个 Sysuser 对象,它是数据库中用户的包装器。我使用此对象中的一些信息进行身份验证,但希望在整个会话期间访问所有信息(名字,姓氏等)。
我原本希望能够创建一个新的方法调用 getUser ,它会将此数据库对象返回给调用者。
但是,这种方法虽然声明为公开,但在尝试调用它时并不可见。我不确定这是否与Wicket有关,或者只是对我的继承如何工作的一般误解。 ;)
BasicAuthenticatedWebSession.java
// self is the view
UIResponder *responder = self;
while ((responder = [responder nextResponder])) {
if ([responder isKindOfClass:UIViewController.class]) break;
}
return (UIViewController *)responder;
Test.java 此类无法编译,因为找不到 BasicAuthenticatedSession 中的 getSysuser 方法。
public class BasicAuthenticatedWebSession extends AuthenticatedWebSession {
public BasicAuthenticatedWebSession(Request request) {
super(request);
}
@Override
protected boolean authenticate(String username, String password) {
Sysuser[] sysusers;
try {
SysuserCriteria userCriteria = new SysuserCriteria();
userCriteria.username.eq(username);
sysusers = Sysuser.listSysuserByCriteria(userCriteria);
} catch (PersistentException e) {
e.printStackTrace();
return false;
}
if (sysusers.length == 0) {
return false;
}
this.username = username;
this.userid = sysusers[0].getId();
return password.compareTo(sysusers[0].getPasswd()) == 0;
}
public Roles getRoles() {
Roles roles = new Roles();
Sysuser[] sysusers;
if (isSignedIn()) {
roles.add("SIGNED_IN");
}
try {
SysuserCriteria sysuserCriteria = new SysuserCriteria();
sysuserCriteria.username.eq(username);
sysusers = Sysuser.listSysuserByCriteria(sysuserCriteria);
for (Object sysuser : sysusers) {
SysroleSetCollection sysroles = ((Sysuser) sysuser).sysrole;
for (Sysrole sysrole : sysroles.toArray()) {
roles.add(sysrole.getRolename().toUpperCase());
}
}
} catch (PersistentException e) {
e.printStackTrace();
}
return roles;
}
public Sysuser getSysuser() {
return sysuser;
}
}
答案 0 :(得分:1)
Wicket项目需要特定的"覆盖"静态方法,我想你返回原始的wicket API会话。我的项目编辑过的副本(会话是你的类名)
public class BasicAuthenticatedWebSession extends AuthenticatedWebSession {
public static BasicAuthenticatedWebSession get() {
return (BasicAuthenticatedWebSession ) Session.get();
}
...
}
和XxxxxApplication类
public class MyProject extends AuthenticatedWebApplication
{
...
@Override
public Session newSession(Request request, Response response) {
return new BasicAuthenticatedWebSession (request);
}
}