gpt4 book ai didi

java - 通过扩展向 Wicket 7 中的 AuthenticatedWebSession 添加方法

转载 作者:行者123 更新时间:2023-12-01 11:11:39 25 4
gpt4 key购买 nike

我正在使用 Wicket 7 并将 AuthenticatedWebSession 扩展为名为 BasicAuthenticatedSession 的类。在执行此操作时,我想添加一个方法来返回有关经过身份验证的用户的一些附加信息。

BasicAuthenticatedSession#authenticate中,我得到一个Sysuser对象,它是数据库中用户的包装器。我使用此对象中的一些信息进行身份验证,但希望在整个 session 期间访问所有信息(名字、姓氏等)。

我期望能够创建一个新的方法调用getUser,它将将此数据库对象返回给调用者。

但是,即使声明为公共(public)方法,该方法在尝试调用它时也是不可见的。我不确定这是否与 Wicket 有关,或者只是我对继承如何工作的普遍误解。 ;)

BasicAuthenticatedWebSession.java

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;
}
}

Test.java 该类无法编译,因为在 BasicAuthenticatedSession 中找不到 getSysuser 方法。

public class Test {
public Test() {
}

public void foo {
if(BasicAuthenticatedSession.get().isSignedIn()) {
Sysuser sysUser = BasicAuthenticatedSession.get().getSysuser();
System.out.println(sysuser.getFirstname);
}
}
}

最佳答案

Wicket 项目需要特定的“覆盖”静态方法,我猜您会返回原始的 wicket API session 。从我的项目中编辑的副本( session 是您的类名)

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);
}
}

关于java - 通过扩展向 Wicket 7 中的 AuthenticatedWebSession 添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32293368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com