У меня есть проект Java EE в Eclipse Neon с гранями Java 1.8, JSF 2.2, JPA 2.1, развертывание на WildFly 10.0. Я использую аннотации безопасности, как показано ниже:Может ли Java @Statless EJB с @RolesAllowed наследовать методы из класса без аннотаций безопасности?
@Stateless
@RolesAllowed("SysAdmin")
public class EJBImpl extends POJOSuperClass implements EJBInterface {
/* ... */
}
Дело в том: POJOSuperClass
не использует аннотации безопасности:
public abstract class POJOSuperClass {
public void someMethod() {
/* ... */
}
/* ... */
}
Когда JSF боб называет унаследованную someMethod()
на экземпляре EJBImpl
, я получаю исключение, даже если войти в систему как пользователь, который имеет роль SysAdmin
:
ERROR ... EJB Invocation failed on component EJBImpl for method public abstract void POJOSuperClass.someMethod(): javax.ejb.EJBAccessException: WFLYEJB0364: Invocation on method: public abstract void POJOSuperClass.someMethod() of bean: EJBImpl is not allowed
Если я добавляю @PermitAll
аннотация для POJOSuperClass
, он работает так, как я хочу (без исключений, если вы вошли в систему как администратор, исключение, если нет), но я хочу сохранить POJOSuperClass, который повторно используется в разных проектах, без таких аннотаций (если я ' m не ошибаюсь, если я использую аннотации на суперклассе, я должен использовать его также в подклассах, что я не хочу иметь в других проектах, которые не используют JAAS).
Как я могу это достичь?
Что произойдет, если вы удалите '@RolesAllowed («SysAdmin») 'из класса и поместить его только в методы, к которым должен обращаться« SysAdmin »? – ujulu
Проблема в том, что 'EJBImpl' наследует методы, к которым должен обращаться' SysAdmin' от 'POJOSuperClass', и я не хочу иметь никаких комментариев в суперклассе ... –