gpt4 book ai didi

java - 身份验证后以编程方式添加角色

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:07:08 24 4
gpt4 key购买 nike

我有以下 JSF 2.1 登录表单,在 Glassfish 3.1 中运行

<h:form id="loginForm">
<h:panelGrid columns="2" cellspacing="5">
<h:outputText value="Username" />
<h:inputText value="#{loginHandler.username}" />
<h:outputText value="Password:" />
<h:inputText value="#{loginHandler.password}" />
<h:outputLabel value="" />
<h:commandButton value="Login" action="#{loginHandler.login}" />
</h:panelGrid>
</h:form>

和下面的支持 bean。

public String login() throws IOException, LoginException {

log.debug("Trying to login with username " + username);

HttpSession session = getRequest().getSession(true);

try {
getRequest().login(username, password);

// if OK, add Roles
????????
...................

} catch (ServletException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


log.debug("USER principal === " + getRequest().getUserPrincipal());

return "home";
}

问题是,如何在成功登录后以编程方式将角色添加到 UserPrincipal?

更新 1:我尝试使用以下代码获取 Subject,但 subject == null。

Subject thisSubject = Subject.getSubject(AccessController
.getContext());

谢谢,科恩

最佳答案

我想出了以下解决方案来在登录后以编程方式添加角色,它至少适用于 GlassFish 3.1.2 build 23。

import com.sun.enterprise.security.SecurityContext;
import com.sun.enterprise.security.web.integration.PrincipalGroupFactory;
import java.security.Principal;
import java.util.Set;
import javax.security.auth.Subject;
import org.glassfish.security.common.Group;

public class GlassFishUtils {
public static void addGroupToCurrentUser(String groupName, String realmName) {
Subject subject = SecurityContext.getCurrent().getSubject();
Set<Principal> principals = subject.getPrincipals();
Group group = PrincipalGroupFactory.getGroupInstance(groupName, realmName);
if (!principals.contains(group))
principals.add(group);
}
}

您需要添加 security.jarcommon-util.jar从 GlassFish 到您的项目库。

并且不要忘记创建一个 <security-role>您的 web.xml 部分中您希望添加的角色。

请注意,我使用的功能似乎不是已发布的稳定 API 的一部分,因此不能保证这会在 GlassFish 的 future 版本中继续工作。

我从sun.appserv.security.AppservPasswordLoginModule.commit()的源代码中得到了关于如何添加角色的信息。 GlassFish 的。如果 future 的 GlassFish 版本破坏了我的代码,这个函数将是一个很好的起点,以便找出如何修复它。

关于java - 身份验证后以编程方式添加角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9082208/

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