powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring security: Как получить авторизованного пользователя в applicationContext.xml
6 сообщений из 6, страница 1 из 1
Spring security: Как получить авторизованного пользователя в applicationContext.xml
    #38874639
23r9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть класс Authentication:
Код: java
1.
2.
3.
4.
5.
public class Authentication {
    public Account getAccount(){
        return (Account) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    }
}



И в файле applicationContext.xml:
Код: java
1.
2.
3.
4.
5.
6.
<bean id="Authentication" class="com.otv.util.Authentication">
</bean>

<bean id="CurrentAccount"
      factory-bean="Authentication"
      factory-method="getAccount"/>



Но так не работает пишет:

glassfish logException while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'Principal' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public com.otv.model.entity.Account com.otv.util.Authentication.getAccount()] threw exception; nested exception is java.lang.NullPointerException]]

Как можно получить авторизованного пользователя в applicationContext.xml?
...
Рейтинг: 0 / 0
Spring security: Как получить авторизованного пользователя в applicationContext.xml
    #38874693
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
23r9Как можно получить авторизованного пользователя в applicationContext.xml?

Никак, т.к. applicationContext.xml создает бины во время загрузки приложения, когда, скорее всего, нет еще автризованного пользователя.
Можно конечно извратиться ч/з AOP.

Но проще использовать DI

Код: java
1.
2.
3.
4.
class CurrentAccount {
   @Autowired
   private Authentication authentication;
}
...
Рейтинг: 0 / 0
Spring security: Как получить авторизованного пользователя в applicationContext.xml
    #38874694
Pavel Kurakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вас не смущает тот факт, что вы хотите получить авторизованного пользователя при старте приложения, т.е. когда его еще нет?
Сделать то что хотите?
...
Рейтинг: 0 / 0
Spring security: Как получить авторизованного пользователя в applicationContext.xml
    #38875181
23r9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mad_nazgul, не совсем понял по поводу @Autowired. Мне ведь нужно получить бин CurrentAccount.

Зачем мне вообще это нужно. Есть PostPaginatorDTO класс запроса к БД (просто свойства и get/set методы). Мне нужно задать авторизованного пользователя по умолчанию чтобы отобразить только его записи. В классе PostPaginatorDTO задавать значения по умолчанию не хочу, потому что если не надо будет придется обнулять постоянно.

Хочу вот так сделать:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<bean id="Authentication" class="com.otv.util.Authentication"/>

    <bean id="CurrentAccount"
          factory-bean="Authentication"
          factory-method="getAccount" scope="request">
        <aop:scoped-proxy/>
    </bean>

    <!-- DTO -->
    <bean id="PostPaginatorDTO" class="com.otv.model.dto.paginator.PostPaginatorDTO">
        <property name="account" ref="CurrentAccount" />
    </bean>



Не совсем понимаю как @Autowired мне поможет создать CurrentAccount бин.

Pavel Kurakin, если вы знаете то подскажите пожалуйста.
...
Рейтинг: 0 / 0
Spring security: Как получить авторизованного пользователя в applicationContext.xml
    #38875188
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
<bean id="authentication" class="com.otv.util.Authentication"/>
<!-- DTO -->
<bean id="postPaginatorDTO" class="com.otv.model.dto.paginator.PostPaginatorDTO">
    <property name="auth" ref="authentication" />
</bean>



Что мешает сделать так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class PostPaginatorDTO  {
  @Autowired
  private Authentication auth;
  ...
  public List getUserRecords() {
    User u = auth.getCurrentAccount();
    // тут используем нашего пользователя для запроса
  }
  ...
}
...
Рейтинг: 0 / 0
Spring security: Как получить авторизованного пользователя в applicationContext.xml
    #38875320
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
23r9mad_nazgul, не совсем понял по поводу @Autowired. Мне ведь нужно получить бин CurrentAccount.

Зачем мне вообще это нужно. Есть PostPaginatorDTO класс запроса к БД (просто свойства и get/set методы). Мне нужно задать авторизованного пользователя по умолчанию чтобы отобразить только его записи. В классе PostPaginatorDTO задавать значения по умолчанию не хочу, потому что если не надо будет придется обнулять постоянно.

Хочу вот так сделать:


Хотеть можно все что угодно, и сделать можно все что угодно... вот только работать будет мало-что :-)
Бины, которые вы создаете в xml, или в классе конфигурации создаются на этапе запуска программы.
Причем если не оговорено другое, то по умолчанию, всегда создается единственный экземпляр класса.
А потом ссылка на него может передаваться с помощью аннотации @Autowired

23r9Не совсем понимаю как @Autowired мне поможет создать CurrentAccount бин.

Pavel Kurakin, если вы знаете то подскажите пожалуйста.

Никак.
Просто @Autowired позволяет воспользоваться уже существующим (созданным) бином.
Естественно в перед этим CurrentAccount должен быть создан как бин (описан в xml).
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring security: Как получить авторизованного пользователя в applicationContext.xml
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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