У меня есть приложение J2EE, работающее на JBoss 4.2.3 сервера приложений. Приложение достижимо через веб-интерфейс. Аутентификация сделана со стандартной аутентификацией. В EJBs я спрашиваю контекст защиты боба для принципала (имя зарегистрированного пользователя) и делаю некоторые проверки авторизации, если этому пользователю разрешают получить доступ к этому методу EJB. Жизнь EJBs в другом ухе, чем сервлеты, обрабатывающие сеть frontend, таким образом, я не могу получить доступ к пружинному контексту приложения непосредственно.
Я хочу переключиться на безопасность Spring для обработки пользовательского входа в систему.
Как я могу распространить пружинные данные для входа к контексту защиты JBoss, таким образом, я могу все еще использовать свой EJBs, не имея необходимость переписывать их?
Я уже нашел страницу, говорящую о "Распространении Идентификационных данных от безопасности Spring до Слоя EJB", но к сожалению это относится к более старой версии безопасности Spring (Acegi), и я не достаточно знаком с безопасностью Spring для создания этой работы с фактической версией (3.0.2).
Вот что-то, что смотрит подобное использование WebLogic.
Если вы правильно настроили Spring-security (фильтр в цепочке фильтров, security-context.xml), вы можете использовать аннотацию @Secured, чтобы ограничить пользователей необходимыми ролями. Вы можете использовать эту аннотацию на уровне класса и / или метода.
Если вам нужно знать всю информацию об авторизации текущего пользователя, вы можете использовать этот помощник (я написал это для своего веб-приложения, но он может быть полезен для других. MyUserDetails
- это служебный компонент, пружина- потомок безопасности UserDetail
.):
public class LoginHelper {
/**
* @return user object if user is authenticated and null if is not
*/
public static User getUser() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null) {
Object principal = authentication.getPrincipal();
if (principal instanceof MyUserDetails) {
return ((MyUserDetails) principal).getUser();
}
}
return null;
}
/**
* Check for authenticated user
*
* @return true if user is authenticated and false if is not
*/
public static boolean isAuthenticated() {
final User user = getUser();
return user != null;
}
}