gpt4 book ai didi

java - 锁定时的 EJB 3.1 身份验证

转载 作者:太空宇宙 更新时间:2023-11-04 14:05:03 25 4
gpt4 key购买 nike

我有一个无状态 bean,我只想允许名为 “TestUser”的用户访问

我已经设置了注释,如下所示:

@Stateless
@DeclareRoles("TestUser")
public class LibraryBean implements LibraryIFace {

@Override
public void setName(String name){
sb.setName( name );
}

@Override
public String getName(){
return sb.getName();
}

@EJB
private SingIFace sb;
}

servlet 锁定 bean 并返回名称。

我希望 servlet 必须在可以从 bean 获取名称后以 TestUser 身份登录。调用 servlet 的真实用户将不会看到任何消息框或插入用户/密码。

这可能吗?

更新我的意思是,我需要 EJB 检查连接以允许在用户/psw 对的基础上拒绝,或者类似的东西。

最佳答案

您可以使用拦截器来完成工作,这比检查 bean 调用中的角色要干净得多。

你的@interface可能是这样的:

@InterceptorBinding
@Target({METHOD, TYPE})
@Retention(RUNTIME)
public @interface Secure {
@NonBinding String[] rolesAllowed() default {};
}

然后设置并建议在您使用 @Secure 注释一个方法时调用该方法,该方法检查 HttpSession 中是否有所需的角色,如果未找到所需的角色,则返回登录页面。

1.- 注册拦截器

<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">

<interceptors>
<class>full_class_name_here</class>
</interceptors>

2.- 实现拦截器

@Secure
@Interceptor
public class SecurityInterceptor implements Serializable{

/**
*
*/
private static final long serialVersionUID = 66355064016557358L;

@AroundInvoke
public Object checkInvocation(InvocationContext joinPoint) throws Exception {

更新:最后,您应该从拦截器访问 HTTP session ,这有点麻烦,可以在此处描述: Is there a way to access HttpSession from EJB module?

关于java - 锁定时的 EJB 3.1 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28943080/

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