Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Security, можно-ли использовать annotated service bean (@Service) / 25 сообщений из 27, страница 1 из 2
23.04.2012, 03:28:19
    #37765632
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
Есть код
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:security="http://www.springframework.org/schema/security"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/security
   http://www.springframework.org/schema/security/spring-security-3.0.xsd">
  
 <!-- This is where we configure Spring-Security  -->
 <security:http auto-config="true" use-expressions="true" access-denied-page="/krams/auth/denied" >
  
  <security:intercept-url pattern="/krams/auth/login" access="permitAll"/>
  <security:intercept-url pattern="/krams/main/admin" access="hasRole('ROLE_ADMIN')"/>
  <security:intercept-url pattern="/krams/main/common" access="hasRole('ROLE_USER')"/>
   
  <security:form-login
    login-page="/krams/auth/login"
    authentication-failure-url="/krams/auth/login?error=true"
    default-target-url="/krams/main/common"/>
    
  <security:logout
    invalidate-session="true"
    logout-success-url="/krams/auth/login"
    logout-url="/krams/auth/logout"/>
  
 </security:http>
  
 <!-- Declare an authentication-manager to use a custom userDetailsService -->
 <security:authentication-manager>
         <security:authentication-provider user-service-ref="customUserDetailsService">
           <security:password-encoder ref="passwordEncoder"/>
         </security:authentication-provider>
 </security:authentication-manager>
  
 <!-- Use a Md5 encoder since the user's passwords are stored as Md5 in the database -->
 <bean class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" id="passwordEncoder"/>
 
 <!-- A custom service where Spring will retrieve users and their corresponding access levels  -->
 <bean id="customUserDetailsService" class="org.krams.tutorial.service.CustomUserDetailsService"/>
  
</beans>


отсуда http://krams915.blogspot.com/2010/12/spring-security-mvc-integration_18.html

Вопрос - можноли вместо <bean id="customUserDetailsService" class="org.krams.tutorial.service.CustomUserDetailsService"/> сделать контролер с анотацией.
Т.е. в моём проекте есть папка services откуда поднимаются контролерры с @Service
И вот оттуда имеено я хотелбы подставить бин
Код: java
1.
<security:authentication-provider user-service-ref="тут">
...
Рейтинг: 0 / 0
23.04.2012, 13:22:09
    #37766123
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
Нус может кто откликнется, мне это очень актуально
...
Рейтинг: 0 / 0
23.04.2012, 13:33:44
    #37766163
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
customUserDetailsService это реализация UserDetailsService для загрузки информации о пользователе. Это не тот @Service, которых в системе будет много и ради которых нужно сканировать все сервисы. Т.е. даже если делать через аннотации, то имеет смысл прописать класс.
Но если очень нужно, то и через @Service будет работать если правильный id указать.
И зря вы контроллеры с сервисами смешали.
...
Рейтинг: 0 / 0
23.04.2012, 14:04:10
    #37766225
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
Я для моего случая невижу как сделать

Я значит, хочу смешать сервис с моим. (ведь мне нужно ещё сделать както регистрацию пользователя)

Делаю так и реализовываю loadUserByUsername
Код: java
1.
2.
@Service
public class AccountServiceImpl implements AccountService, UserDetailsService{


далее прописываю
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
 <!-- Declare an authentication-manager to use a custom userDetailsService -->
 <security:authentication-manager>
         <security:authentication-provider user-service-ref="AccountServiceImpl">
           <security:password-encoder ref="passwordEncoder"/>
         </security:authentication-provider>
 </security:authentication-manager>
  
 <!-- Use a Md5 encoder since the user's passwords are stored as Md5 in the database -->
 <bean class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" id="passwordEncoder"/>


и
авторError creating bean with name 'org.springframework.security.authentication.dao.Dao
AuthenticationProvider#0': Cannot resolve reference to bean 'AccountServiceImpl' while setting bean property 'userDetailsService'; nested ex
ception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'AccountServiceImpl' is defined

Нужна помощь, как тут что.....
Т.е. как мне потом сделать регистрацию ещё и чтобы сервис был annotated, так как я его подсаживаю в контролеррах
...
Рейтинг: 0 / 0
23.04.2012, 14:07:52
    #37766233
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
Вероятно с маленькой буквы стоило написать
user-service-ref="accountServiceImpl"
...
Рейтинг: 0 / 0
23.04.2012, 14:09:01
    #37766236
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
или задать имя явно
@Service(value="AccountServiceImpl")
это id бина и он у вас не совпадает.
...
Рейтинг: 0 / 0
23.04.2012, 14:20:52
    #37766257
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
О работает. Спасибо большое.
...
Рейтинг: 0 / 0
23.04.2012, 14:22:24
    #37766260
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
А как рекомендуете регистрацию нового пользователя сделать?
Мой вариант у меня самого вызывает опасение что я не так делаю
...
Рейтинг: 0 / 0
23.04.2012, 14:30:31
    #37766279
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
ccoderА как рекомендуете регистрацию нового пользователя сделать?
Рекомендую сделать хорошо и чтобы работало.

ccoderМой вариант у меня самого вызывает опасение что я не так делаю
Это очень информативно. Техническая проблема какая?
...
Рейтинг: 0 / 0
23.04.2012, 14:53:02
    #37766332
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
ccoderМой вариант у меня самого вызывает опасение что я не так делаю
Это очень информативно. Техническая проблема какая?[/quot]
Тогда какбы всё. СПАСИБО
...
Рейтинг: 0 / 0
23.04.2012, 15:00:04
    #37766342
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
А кстати я насчет
Код: java
1.
2.
3.
         <security:authentication-provider user-service-ref="AccountServiceImpl">
           <security:password-encoder ref="passwordEncoder"/>
         </security:authentication-provider>


passwordEncoder хочу спросить.
Вы можете описать коротко как он работает.

Т.е. мне нужно когдя я регистрирую пользователя переводить пароль через
Код: java
1.
2.
3.
private PasswordEncoder encoder = new Md5PasswordEncoder();

u.setPassword(encoder.encodePassword(plainTextPassword, username));



а как он тут расшифровываться будет?

Т.е. что подразумевается под
Код: java
1.
<security:password-encoder ref="passwordEncoder"/>
...
Рейтинг: 0 / 0
23.04.2012, 15:03:26
    #37766352
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
Пароли не расшифровываются. Берется ввод пользователя, для него делается такой же hash и сравнивается сам hash.
Таким образом система не знает паролей пользователей и их нельзя увести. Ну, и стоит напомнить что чистый MD5 сейчас подбирается на ура. Не забывайте солить.
...
Рейтинг: 0 / 0
23.04.2012, 15:15:24
    #37766384
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
А как их зашифровывать когда нужно добавить нового пользователя?

Т.е. нужно "ручным" способом это всё делать
Код: java
1.
2.
3.
4.
5.
private PasswordEncoder encoder = new Md5PasswordEncoder();

u.setPassword(encoder.encodePassword(plainTextPassword, username));

и далее сохранять в DB
...
Рейтинг: 0 / 0
23.04.2012, 15:16:21
    #37766390
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
тут
(plainTextPassword, username )
это то чем солятся? :)
...
Рейтинг: 0 / 0
23.04.2012, 15:16:53
    #37766392
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
ccoder
Код: java
1.
private PasswordEncoder encoder = new Md5PasswordEncoder();


Да. Только вместо вот этой фигни что вы написали нужно делать инъекцию текущего энкодера спрингом.
...
Рейтинг: 0 / 0
23.04.2012, 16:24:41
    #37766543
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
Ещё один момент есть про который я очень хочу спросить.

у меня пользователь после авторизации получает свой личный объект и он должен присутствовать на всех станицах для пользователя.
например если
Код: java
1.
<security:intercept-url pattern="/krams/main/common" access="hasRole('ROLE_USER')"/>


то на всех контролерров которые замапины автор/krams/main/common/.......
я должен иметь этот объект (при этом для конкретного пользователя)
(сам объект берётся из базы данных при авторизации)

Есть-ли чтото тут предусмотренного для этого случая?
...
Рейтинг: 0 / 0
23.04.2012, 16:28:26
    #37766554
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
UserDetailsService -> UserDetails чем не устраивает?
...
Рейтинг: 0 / 0
23.04.2012, 16:43:20
    #37766591
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
Т.е. туда можно както добавить свой ещё один объект?
Имею ввиду
Код: java
1.
2.
	public UserDetails loadUserByUsername(String username)
			throws UsernameNotFoundException {



А как его потом получить в котролерре?
...
Рейтинг: 0 / 0
23.04.2012, 16:49:49
    #37766623
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
UserDetails это интерфейс. Вы его реализуете с любыми данными, которые пожелаете загрузить.

Доставать вот так:
http://stackoverflow.com/questions/6161985/get-userdetails-object-from-security-context-in-spring-mvc-controller
или вот так
http://stackoverflow.com/questions/248562/when-using-spring-security-what-is-the-proper-way-to-obtain-current-username-i
...
Рейтинг: 0 / 0
23.04.2012, 17:02:06
    #37766666
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
авторВы его реализуете с любыми данными, которые пожелаете загрузить.
Т.е. нужно унаследовать UserDetails?
...
Рейтинг: 0 / 0
23.04.2012, 17:06:21
    #37766680
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
ccoderТ.е. нужно унаследовать UserDetails?
Интерфейсы не наследуют.
...
Рейтинг: 0 / 0
23.04.2012, 17:26:49
    #37766740
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
Я тогда вот это не понял
По идее я сам объект отдаю тут
Код: java
1.
2.
	public UserDetails loadUserByUsername(String username)
			throws UsernameNotFoundException {


и потом Hibernate Security у него берёт login и password, то как тогда мне в него добавить свой объект?
...
Рейтинг: 0 / 0
23.04.2012, 17:28:18
    #37766742
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
При этом мой объект является domain, т.е. через mapping в hibernate я храню его в базе данных
...
Рейтинг: 0 / 0
23.04.2012, 21:04:34
    #37767086
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
Помогите понять что означает
авторorg.springframework.security.authentication.LockedException
В доках
авторThrown if an authentication request is rejected because the account is locked. Makes no assertion as to whether or not the credentials were valid.
И всёравно не понимаю что это такое и откуда берётся. (получаю при логине с spring security)
...
Рейтинг: 0 / 0
23.04.2012, 21:06:34
    #37767089
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security, можно-ли использовать annotated service bean (@Service)
Извиняюсь, нашел.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Security, можно-ли использовать annotated service bean (@Service) / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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