gpt4 book ai didi

java - 如何删除接缝安全模块添加的状态消息?

转载 作者:行者123 更新时间:2023-12-04 06:54:31 25 4
gpt4 key购买 nike

当暂停的用户尝试登录时,我想显示不同的状态消息。如果用户处于 Activity 状态,我们从 authenticate 方法返回 true,如果不是,我们添加一个自定义 StatusMessage 消息,提及“用户 X 已被暂停”。底层身份验证也失败并添加了一个 StatusMessage。我尝试使用以下方法删除接缝生成的 statusMessage,但它似乎不起作用并显示了 2 个不同的状态消息(我的自定义消息,接缝生成)。这里会有什么问题?

StatusMessages statusMessages;

statusMessages.clear()
statusMessages.clearGlobalMessages()
statusMessages.clearKeyedMessages(id)

编辑1:
public boolean authenticate() {

log.info("Authenticating {0}", identity.getCredentials().getUsername());

String username = identity.getCredentials().getUsername();
String password = identity.getCredentials().getPassword();

// return true if the authentication was
// successful, false otherwise
try {
Query query = entityManager.createNamedQuery("user.by.login.id");
query.setParameter("loginId", username);
// only active users can log in
query.setParameter("status", "ACTIVE");

currentUser = (User)query.getSingleResult();
} catch (PersistenceException ignore) {
// Provide a status message for the locked account
statusMessages.clearGlobalMessages();
statusMessages.addFromResourceBundle(
"login.account.locked", new Object[] { username });
return false;
}

IdentityManager identityManager = IdentityManager.instance();
if (!identityManager.authenticate(username, "password")) {
return false;
} else {
log.info("Authenticated user {0} successfully", username);
}
}

最佳答案

您可以看到 Seam 使用的状态消息(您 必须 在资源包中定义它们)

  • org.jboss.seam.login 失败
  • org.jboss.seam.login成功
  • org.jboss.seam.NotLoggedIn

  • 所以你可能想要覆盖 org.jboss.seam.loginFailed 键(不要忘记注册你的资源包)
    somePropertiesFile.properties

    org.jboss.seam.loginFailed=<YOUR_CUSTOM_MESSAGE_GOES_HERE>

    并使用以下一个
    <h:messages globalOnly="true"/>

    显示身份验证消息

    更新

    如果您想要自定义消息,请执行以下操作

    从 Seam 2.1 开始,您应该验证您的用户 通过注入(inject)凭据而不是身份
    @Name("authenticationManager")
    public class AuthenticationManager {

    private @In org.jboss.seam.security.Credentials credentials;

    public boolean authenticate() {

    private String username = credentials.getUsername();
    private String password = credentials.getPassword();

    try {

    Query query = entityManager.createNamedQuery("user.by.login.id");
    query.setParameter("loginId", username);
    query.setParameter("status", "ACTIVE");

    currentUser = (User) query.getSingleResult();

    } catch (PersistenceException ignore) {
    return false;
    }

    return true;
    }

    }

    在您的 JSF 表单中,再次使用凭据而不是身份
    <h:inputText id="username" value="#{credentials.username}"/>
    <h:inputText id="password" value="#{credentials.password}"/>

    显示您的自定义消息 , 做如下
    <h:outputText value="#{credentials.username} has been suspended" rendered="#{not identity.loggedIn}"/>

    现在我希望它能正常工作!

    关于java - 如何删除接缝安全模块添加的状态消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2696194/

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