EJB 3.1 аутентификация при блокировке

1

У меня есть Faceless 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;
}

Сервлет выполняет блокировку компонента и возвращает имя.

Я хочу, чтобы сервлет должен был выполнить логин в качестве TestUser после получения имени из bean-компонента. Настоящий пользователь, вызывающий сервлет, не должен видеть ни одного окна сообщения или не вводить пользователя/пароль.

Это возможно?

ОБНОВЛЕНИЕ Что я имею в виду, так это то, что мне нужно, чтобы EJB проверил соединения, чтобы разрешить o reject в базе пары user/psw или что-то вроде этого.

Теги:
servlets
java-ee
ejb
jboss

1 ответ

0

Вы можете использовать перехватчик для работы, намного чище, чем проверять роли в вызове 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 от вашего перехватчика, что немного громоздко и может быть описано здесь: есть ли способ получить доступ к HttpSession из модуля EJB?

  • 0
    Спасибо за ответ, у меня есть 2 вопроса о вашем коде. Я должен внедрить это в проект, где живет боб, верно? Что должен сделать клиент для аутентификации?
  • 0
    1.- По крайней мере, перехватчик должен «видеть» объявление @interface 2.- Контроллер, обрабатывающий процесс log.in, должен поместить роль пользователя в сеанс HTTP, чтобы позже его можно было проверить в EJB
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню