У меня есть одно требование, чтобы программным образом добавить ограничение авторизации (полномочия) (это не аутентификация). У меня есть управляемый программой CDI управляемый bean-компонент следующим образом.Программируемая авторизация в JAAS
@Named
@ApplicationScoped
public class Bean {
@Inject
private Service service;
private List<Entity>list;
public Bean() {}
@PostConstruct
private void init() {
initialize();
}
private void initialize() {
// Initialize the list on application start up.
// The service.getList() method in an EJB is authenticated anonymously
// for the first time on application start up.
list=service.getList();
// Do something programmatically to enforce the authority ROLE_ADMIN afterwords.
}
// This method is only invoked by an admin (ROLE_ADMIN) as and when required.
// The @PostConstruct method may however be invoked by an anonymous user on start up.
public void action() {
initialize();
}
}
Возможно ли принудительное исполнение полномочий/роли программно перед методом украшенной @PostConstruct
отделки, так что метод service.getList()
EJB вызывается только пользователем (ами), имеющим указанный ROLE_ADMIN
орган после того, как метод украшен @PostConstruct
заканчивает работу?
Другими словами, он ведет себя точно так, как показано ниже, после слов - один раз @PostConstruct
заканчивает работу?
@Stateless
@DeclareRoles(value = {"ROLE_ADMIN", "ROLE_USER"})
@RolesAllowed(value = {"ROLE_ADMIN"})
public class Skeleton implements Service {
@Override
public List<Entity> getList() {
return entityManager.createQuery("SELECT e FROM Entity e").getResultList();
}
}
настоящее время я использую GlassFish Server 4.1, но было бы лучше, если ответ (ы) были контейнер агностик.
Возможно [это поможет] (http://docs.oracle.com/javaee/7/tutorial/security-javaee002.htm#GJGCS) –
Я не думаю, что это имеет смысл в контексте ' @ ApplicationScoped' bean. –
@peeskillet: вся эта страница описывает использование '@ DeclareRoles',' @ RolesAllowed' и '@ RunAs'. Он ничего не говорит о назначении авторитета/роли динамически во время выполнения, то есть «* программно *». – Tiny