Поддерживает ли безопасность Acegi / Spring getUserPrincipal ()? - PullRequest
5 голосов
/ 11 марта 2009

Мне нужно связать существующее приложение с безопасностью Acegi / Spring.

Для начала я ищу одну простую информацию: будет ли HttpServletRequest.getUserPrincipal (), вызываемая из моего приложения, правильно возвращать имя пользователя, полученное через Spring (в отличие от использования объектов, специфичных для Spring)? У меня есть противоречивая информация по Google.

Я предполагаю, что если Acegi реализован с фильтрами, он может перегрузить функцию getUserPrincipal () API сервлета, верно?

Вспомогательный вопрос: если по умолчанию это не так, есть ли способ его включить?

Спасибо

-Erik

Ответы [ 3 ]

6 голосов
/ 10 апреля 2009

Поскольку предыдущий пользователь имеет ответ, пружинная безопасность поддерживает getUserPrincipal и isUserInRole. Вот как это делает весенняя безопасность.

При настройке пружины он может загружать следующие фильтры:

http://static.springframework.org/spring-security/site/reference/html/ns-config.html#filter-stack

Как часть стандартной конфигурации фильтра загружен фильтр SecurityContextHolderAwareRequestFilter.

Проверка фильтра @ https://fisheye.springsource.org/browse/spring-security/tags/spring-security-parent-2.0.4/core/src/main/java/org/springframework/security/wrapper/SecurityContextHolderAwareRequestFilter.java?r=2514

Вы можете видеть, что он оборачивает и изменяет объект HttpServletRequest на класс SecurityContextHolderAwareRequestWrapper, который расширяет HttpServletRequestWrapper, который реализует HttpServletRequest, и возвращает его обратно в стандартную цепочку doFilter фильтра сервлетов. Поскольку весенний защитный фильтр должен быть настроен как первый фильтр, все последующие классы будут видеть SecurityContextHolderAwareRequestWrapper вместо этого. Это включает в себя страницы JSP или сервлеты за этим фильтром.

Когда вы делаете вызов isUserInRole или getUserPrincipal со страницы JSP, сервлета или любой инфраструктуры, скрытой за этим фильтром, он вызывает реализацию HttpServletRequest из Spring Security.

1 голос
/ 12 марта 2009

Если вы используете фильтр безопасности, да, это так. Я считаю, что это поведение по умолчанию.

Какой именно класс вы получите, зависит от вашей конфигурации, но все они реализуют интерфейс Principal с помощью собственного интерфейса Spring, org.springframework.security.Authentication, который расширяет его.

Я использовал request.getUserPrincipal () и request.isUserInRole () в приложении Spring, и он работает без проблем, даже в JSP.

0 голосов
/ 19 марта 2009

Я верю, что Spring Security хранит эту информацию в SecurityContext, а не в запросе. Вы можете легко написать FilterSecurityInterceptor, который можно настроить для добавления этой информации в запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...