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