powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / не получается с Spring-sequrity
27 сообщений из 27, показаны все 2 страниц
не получается с Spring-sequrity
    #39345981
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никак не получается настроить spring sequrity - кажется уже попробовал все. В чем ошибка?



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<http auto-config="true" use-expressions="true">
	<intercept-url pattern="/admin**" access="hasRole('ROLE_ADMIN')" />
	<intercept-url pattern="/select**" access="hasRole('ROLE_USER')" />

	<access-denied-handler error-page="/403" />
	<form-login 
	    login-page="/login" 
            default-target-url="/home" 
		authentication-failure-url="/login?error" 
		username-parameter="username"
		password-parameter="password" />
	<logout logout-success-url="/login?logout" />
	<csrf/>
</http>
	
<authentication-manager>
	<authentication-provider>
		<jdbc-user-service data-source-ref="dataSource"
			users-by-username-query=
			       "select username, password, enabled from users where email=?"
			authorities-by-username-query=
				"SELECT users.username, roles.role FROM users INNER JOIN roles ON users.user_id = roles.user_id WHERE users.email=?" />
	</authentication-provider>
</authentication-manager>




на jsp:
Код: java
1.
2.
3.
4.
<label>E-mail</label>
<input required type="text" name="username" />
<label>Пароль</label>
<input required type='password' name='password' />



Пробовал ставить на jsp input с name="email" - тоже не работает. Все время получаю из контроллера "Invalid username and password!". В консоли никаких ошибок.
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346023
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придется кастомизировать аутентификацию, потому что <form-login> только для username, а не email.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
import org.springframework.security.core.userdetails.UserDetailsService;

public class MyUserServiceImpl implements UserDetailsService{

    @Autowired
    private AdminUserDao dao;

    @Override
    public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException, DataAccessException {

    ... Here comes your logic to get your the user based on email

    }
}



Код: xml
1.
2.
3.
<authentication-manager>
    <authentication-provider user-service-ref="myUserServiceImpl" />
</authentication-manager>
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346025
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя пробовал ли тыне только в jsp менять name на email, но и в <form-login> тоже менять строку
username-parameter="username"
на
username-parameter="email" ?
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346029
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,
связи в таблице не правильные
должен быть "справочник" ролей
id
role_name
в таблицу user добпвить поле id из справочника ролей
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346030
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Паша01Хотя пробовал ли тыне только в jsp менять name на email, но и в <form-login> тоже менять строку
username-parameter="username"
на
username-parameter="email" ?

пробовал, в разных комбинациях, не работало.
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346032
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяrema174,
связи в таблице не правильные
должен быть "справочник" ролей
id
role_name
в таблицу user добпвить поле id из справочника ролей

ты имеешь ввиду неправильно с точки зрения строения БД ? но это может никак не относиться к вопросу...
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346044
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,
а как ты передаёшь введённое на сервер?
код уже из браузера?
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346074
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяа как ты передаёшь введённое на сервер?
так, как это делается в spring-security - там есть немалая толика магии...
если я делаю выборку только по юзернейм, то все работает
но идея в том, что юзернейм не уникален, нужен укникальный идентификатор, почему я и пробовал c email

вадякод уже из браузера?
не понял. код из jsp показан выше.

теоретически можно записать email в параметр username и сохранять его как юзернейм, т.е на базе в юзернейм будет храниться имейл, но это явно неправильно, т.к. все-равно нужно хранить еще и реальный нейм и доставать его в такой же удобной манере как ${pageContext.request.userPrincipal.name} - т.е. сейчас отсюда выйдет email, а как я понял в userPrincipal хранит в себе именyо username и что туда еще можно впихнуть непонятно.
опять же теоретически можно аяксом при загрузке страницы передавать на сервер userPrincipal.name (т.е. имейл) и обратно подставлять его в страницу, но это какой-то костыль.
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346077
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,
код jsp и код из браузера несколько разичается :)
если вместо правильног мыла написать простую строку из символов- тоже будет ошибка?
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346078
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяесли вместо правильног мыла написать простую строку из символов- тоже будет ошибка?
будет. но это не совсем ошибка - просто непроходит аутентификацию.
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346080
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174но идея в том, что юзернейм не уникаленЭто полное (отображаемое) имя могут быть неуникальны, а вот имя пользователя (aka логин) - вполне себе уникален.
Хотите использовать в качестве логина (глобально уникальный) e-mail - используйте. Наверняка в документации есть готовые примеры.
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346127
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorovимя пользователя (aka логин) - вполне себе уникален
не для всех решений приемлимо делать уникальный логин, хотя тоже вариант
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346143
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,

У меня твоя аутентификация через емайл заработала, когда я в select-е вернул вместо username поле email.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<authentication-manager>                                                                                                     
	<authentication-provider>                                                                                                   
		<jdbc-user-service data-source-ref="dataSource"                                                                            
			users-by-username-query=                                                                                                  
				"SELECT email,password,enabled FROM users WHERE email=?"                                                                 
			authorities-by-username-query=                                                                                            
				"SELECT u.email, ur.role FROM users u INNER JOIN user_roles ur ON u.user_id=ur.user_id WHERE u.email =?  " />            
	</authentication-provider>                                                                                                  
</authentication-manager>                                                                                                    



Строка, которая возвращается из первого запроса, спринг маппит на класс org.springframework.security.core.userdetails.UserDetails. А в нем нету поля для email. Т.е. спринг записывает значение email в поле username класса UserDetails. И думает, что это юзернейм в дальнейшем. Поэтому тебе придется для своих нужд кастомизировать эту аутентификацию, как я писал это в сообщении выше 19885493
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346160
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Паша01,

это тоже самое что изначально держать в базе в колонке username имейл юзера и выдавать его за юзернейм, поэтому действительно остается только разобраться с пользовательской аутентификацией
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346175
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,
если тебе важен принцип, а не сам инструмент
http://findevelop.blogspot.ru/2013/10/web-spring-security-100.html
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346269
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174не для всех решений приемлимо делать уникальный логин, хотя тоже вариантЛогин обязан быть уникальным.
Даже если пользователь не вводит этот логин.
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346306
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorovrema174не для всех решений приемлимо делать уникальный логин, хотя тоже вариантЛогин обязан быть уникальным.
Даже если пользователь не вводит этот логин.

я имел ввиду, что не хотел вводить уникальные "имя пользователя (aka логин)", вместо этого будет уникальный email
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346433
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
после непродолжительного знакомства с данной библиотекой навеяло мыслю: а может ну его в баню этот комбайн, т.к слишком монструозненько...
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346444
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174, я дал тебе ссылку -там можно решить все твои хотелки простыми средствами....
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346610
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,
я скорее всего воспользуюсь ей в одном из проектов, чтобы не тянуть этого бегемота
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346695
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,
На всякий случай альтернатива спрингу - в АппСервере из коробки.
Например, в GlassFish это связи Логин-Роли-Группы(админские)
Mapping Roles to Users and Groups
http://docs.oracle.com/javaee/6/tutorial/doc/bnbxj.html

вадяrema174, я дал тебе ссылку -там можно решить все твои хотелки простыми средствами....
это если не знать. что в АппСервере это тоже решается в 8 строк
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<glassfish-web-app>
    ...
    <security-role-mapping>
        <role-name>Mascot</role-name>
        <principal-name>Duke</principal-name>
    </security-role-mapping>

    <security-role-mapping>
        <role-name>Admin</role-name>
        <group-name>Director</group-name>
    </security-role-mapping>
    ...
</glassfish-web-app>



rema174Пробовал ставить на jsp input с name="email" - тоже не работает
а может стоит прямо принять почту как логин? И исключить понятие почта?
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346769
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123а может стоит прямо принять почту как логин? И исключить понятие почта?
я рассматривал такой вариант, но этого недостаточно, т.к. у юзера еще есть и другие свойства, как например реальное имя, секретный вопрос и т.д. - а это уже надо делать как тут 19885493
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346777
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174я рассматривал такой вариант, но этого недостаточно, т.к. у юзера еще есть и другие свойства, как например реальное имя, секретный вопрос и т.д.
не понял.
Я видел много сайтов у которых почта это логин при входе.
А все остальные реквизиты это дополнительные поля профиля. Хоть кличку собаки добавляй.
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39346987
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123а может стоит прямо принять почту как логин? И исключить понятие почта?

Petro123Я видел много сайтов у которых почта это логин при входе.
А все остальные реквизиты это дополнительные поля профиля.

можно конечно принять почту как логин, но тогда в месте с "принципалом" не получишь все остальные дополнительные реквизиты, что неудобно. так вот, чтобы их получить и нужно городить огород )
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39347014
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174но тогда в месте с "принципалом" не получишь все остальные дополнительные реквизиты
непонятно.
Тут огород?
Код: java
1.
2.
3.
4.
5.
Сигнатура метода 	Описание
Object getPrincipal() 	Возвращает уникальный идентификатор принципала (например, имя пользователя).
Object getCredentials() 	Возвращает учетные данные принципала.
List<GrantedAuthority>getAuthorities() 	Возвращает набор полномочий, которые имеет принципал, как определено в хранилище аутентификации.
Object getDetails() 	Возвращает в зависимости от провайдера детали о принципале. 
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39347078
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,ну ты попробовал бы сделать и тогда понятней станет
...
Рейтинг: 0 / 0
не получается с Spring-sequrity
    #39347080
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,
Ок. Верю на слово) что сложно получить телфон юзверя в интерфейсе User.
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / не получается с Spring-sequrity
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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