powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF+Spring Security+Hibernate, доступ к SecurityContextHolder из Facelet
5 сообщений из 5, страница 1 из 1
JSF+Spring Security+Hibernate, доступ к SecurityContextHolder из Facelet
    #38422310
BaurzhanS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Передо мной стоит задача сделать простенькую классическую конструкцию - регистрация, авторизация, просмотр списка товаров, создание своего товара. Сложность для меня заключается в том, что обязательно надо использовать ранее незнакомую мне технологию JSF -так сказала партия такое вот тестовое задание) Что я сделал на данный момент и в чем именно мой вопрос:

1) Авторизацию я сделал на Spring Security.
Код: java
1.
 Authentication-provider

у меня свой - реализовал интерфейс
Код: java
1.
org.springframework.security.core.userdetails.UserDetailsService

помимо стандартных имя/пароль в сесси храню ID авторизованного пользователя.

2) Описание базы. Всего две таблички, пользователи и товары, товары к пользователям находятся в отношении Many To One. Связка идет по полю ownerID таблицы товаров - у каждого товара - свой заказчик, ownerID=ID заказчика, либо 0, если товар создан кем-то, но никто его пока не заказал.

3) Как можно сделать на серлетах/JSP:
- создание товара : JSP с формой заполнения инфы о товаре, кнопка на которую повешен AJAX запрос к сервлету, в котором в базу записываю инфу, а ownerID это ID авторизованного пользователя, которое вытаскивается как-то так:
Код: java
1.
2.
3.
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
UserSessionInfo userSessionInfo = (UserSessionInfo)auth.getPrincipal();
int curUserID = userSessionInfo.getUserID(); 


- просмотр свободных товаров : динамически создать табличку в JSP, заполнив ее запросом вида
Код: sql
1.
select * from orders where ownerID=0


- просмотр своей корзины товаров : динамически создать табличку в JSP, заполнив ее запросом вида
Код: sql
1.
select * from orders where ownerID=getAutheticatedUserID



Вопросы -

1) в Facelet-е непонятно как обращаться к
Код: java
1.
SecurityContextHolder.getContext()

, чтобы вытащить ID автризованного пользователя, а потом уже вытакивать по ID его товары. Где- то нагугливал, что необходимо создать бин, который уже умеет(??) обращаться SecurityContextHolder, оттуда делать Hibernate запросы? там же динамически создавать view объект, например HtmlPanelGroup и в Facelet-е обращаться как-то так
Код: html
1.
<h:panelGroup binding="#{datatableManagedBean.dynamicDataTableGroup}" />

. Пример здесь . Там мне непонятно как инициализировать этот бин - при обращении с фейслета сам что ли создается? И умеет ли он обращаться к SecurityContextHolder? Я так понял,он доступен всем, кто видит ServletContext.

И самое главное, в пункте №3 я указал разные сценарии, на каждый из них свой бин создавать? Типа бин для корзины своих товаров, бин для свободных товаров?

2) Вот вытащил я список свободных товаров, у которых ownerID=0. Как к этой ссылке привязать ID товара, чтобы по нажатию, например, на чекбокс, я мог потом вытащить айдишники всех чекнутых и POST запросом(????) на некий сервлет привязать выбранные товары к авторизованному пользователю.
...
Рейтинг: 0 / 0
JSF+Spring Security+Hibernate, доступ к SecurityContextHolder из Facelet
    #38423030
z3r9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BaurzhanS , тоже сейчас разбираюсь в связке JSF + Spring security. В LoginBean создай метод getAuthentication():

Код: java
1.
2.
3.
public Authentication getAuthentication(){
    return SecurityContextHolder.getContext().getAuthentication();
}



И через него можно получить параметры авторизированного пользователя. Например имя можно получить так:
Код: html
1.
#{loginMB.authentication.name}



BaurzhanS а у тебя в этой связке работает Spring security tag? Потому что у меня с этим проблема. То есть попробуй вот так:
Код: html
1.
2.
3.
4.
5.
6.
<sec:authorize access="hasRole('ROLE_ANONYMOUS')">
	ROLE_ANONYMOUS
</sec:authorize>
<sec:authorize access="hasRole('ROLE_ADMIN')">
	ROLE_ADMIN
</sec:authorize> 



Кстати видел еще пример что выводили например имя через тег authentication:

Код: html
1.
2.
3.
<sec:authorize access="isAuthenticated()">
    <sec:authentication property="principal.displayName" />
</sec:authorize> 



Проверь пожалуйста работает ли у тебя тег authorize, потому что у нас с тобой будет общая беда.
...
Рейтинг: 0 / 0
JSF+Spring Security+Hibernate, доступ к SecurityContextHolder из Facelet
    #38423207
BaurzhanS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не использую теги спринг-секьюрити в Facelet-е, у меня там просто форма с повешенным на нее POST запросом на j_spring_security_check. Все разрешения у меня прописаны в файле app-security.xml (который, в свою очередь прописан в web.xml) и имеют вид (кнопка SRC не работает, поэтому неформатированный код)

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns=" http://www.springframework.org/schema/security"
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans=" http://www.springframework.org/schema/beans"
xmlns:context=" http://www.springframework.org/schema/context"
xsi:schemaLocation=" http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


<http auto-config="true" use-expressions="true">
<!-- <intercept-url pattern="/index.html" access="permitAll"/> -->
<intercept-url pattern="/index.html" access="hasAnyRole('admin','user')"/>
<form-login login-page="/login.html" default-target-url="/index.html" authentication-failure-url="/login.html"/>
<logout logout-success-url="/login.html"/>
</http>


<authentication-manager alias="authenticationManager">

<authentication-provider user-service-ref='UserDetailServiceImpl'>
</authentication-provider>
</authentication-manager>
<context:annotation-config />

<beans:bean id="UserDetailServiceImpl" class="com.mypackage.UserDetailServiceImpl">
</beans:bean>

</beans:beans>
...
Рейтинг: 0 / 0
JSF+Spring Security+Hibernate, доступ к SecurityContextHolder из Facelet
    #38423427
z3r9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BaurzhanS , ну это понятно но смысл подключения JSF+Spring Security, как раз в том чтобы использовать тег Spring Security на JSF странице. Потому что ограничение в файле app-security.xml это всего лишь ограничение по доступу через URL, как таковой связи JSF+Spring Security тут нет. У меня тоже так работает но это не связка а просто использование отдельно. Подключаются теги Spring Security к JSF так . Попробуйте, если вам это интересно, может быть у вас получится.
...
Рейтинг: 0 / 0
JSF+Spring Security+Hibernate, доступ к SecurityContextHolder из Facelet
    #38423856
z3r9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все я проблему решил, IDE пакостила, я наверное 2 дня убил, думал версии не совместимы. В общем ссылка выше актуально и все работает.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF+Spring Security+Hibernate, доступ к SecurityContextHolder из Facelet
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]