powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Security. Авторизация.
7 сообщений из 7, страница 1 из 1
Spring Security. Авторизация.
    #39140822
wvetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот что имею:
AppSecurityConfig.java:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Override
    protected void configure(HttpSecurity http) throws Exception {
      http
        .httpBasic().and()
        .authorizeRequests()
          .antMatchers("/index.html", "/home.html", "/login.html", "/").permitAll().anyRequest()
          .authenticated().and()
          .csrf().csrfTokenRepository(csrfTokenRepository()).and()
        .addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class);
    }


Пользователи и права зашиты:
Код: java
1.
2.
3.
4.
5.
@Autowired
	public void globalUserDetails(AuthenticationManagerBuilder auth) throws Exception {
		auth.inMemoryAuthentication().withUser("admin").password("admin").roles("ADMIN", "USER");
                auth.inMemoryAuthentication().withUser("test").password("test").roles("TESTER");
	}


Когда ввожу http://localhost:8080/myapp/rest/user - необходимо ввести логин и пароль, и тогда получаю пользователя с его правами. Так и должно работать.

Теперь, хочу подтягивать пользователей не зашитых, а из базы.
Меняю немного код:
Код: java
1.
2.
3.
4.
5.
6.
@Autowired
    public void globalUserDetails(AuthenticationManagerBuilder auth) throws Exception {
        auth
        	.userDetailsService(userDatailsService)
        	.passwordEncoder(new Md5PasswordEncoder());
    }


UserDetailsServiceImpl.java:
Код: 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.
@Override
	@Transactional(readOnly = true)
	public UserDetails loadUserByUsername(String username)
			throws UsernameNotFoundException {
		///User user = userDao.findUserByName(username); // пробовал так, но теперь пробую через userRepository
		User user = userRepository.findOne((long) 1); // здесь происходит зацикливание, просит снова ввести пароль и так по кругу
		
		if(user!=null){
			String password = user.getPassword();
			//additional information on the security object
			boolean enabled = user.getStatus().equals(UserStatus.ACTIVE);
			boolean accountNonExpired = user.getStatus().equals(UserStatus.ACTIVE);
			boolean credentialsNonExpired = user.getStatus().equals(UserStatus.ACTIVE);
			boolean accountNonLocked = user.getStatus().equals(UserStatus.ACTIVE);
			
			//Let's populate user roles
			Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
			for(Role role : user.getRoles()){
				authorities.add(new SimpleGrantedAuthority(role.getRoleName()));
			}
			
			//Now let's create Spring Security User object
			org.springframework.security.core.userdetails.User securityUser = new 
					org.springframework.security.core.userdetails.User(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
			return securityUser;
		}else{
			throw new UsernameNotFoundException("User Not Found!!!");
		}
	}


Что необходимо подправить, чтоб пользователи подтягивались из базы?
...
Рейтинг: 0 / 0
Spring Security. Авторизация.
    #39140830
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wvetal,
думаю сначала аутентификация, а потом сабж.
По первой тут чел мучался со спрингом - поиск.
...
Рейтинг: 0 / 0
Spring Security. Авторизация.
    #39140851
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Spring Security. Авторизация.
    #39140853
imperfekt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wvetal,

Если на строке
Код: java
1.
User user = userRepository.findOne((long) 1);


происходит зацикливание, нужно смотреть под дебагом, что именно там творится. Параллельно проверить в инструментах разработчика в браузере, что за запросы и ответы ходят между клиентом и сервером. Причин может быть много: от того, что пользователь с id 1 в базе отсутствует, до ошибки обращения к базе. Например, при обработке исключения может идти переадресация на страницу ошибки, которая в свою очередь требует аутентификации. Ещё полезно настроить логирование spring security - логов пишется много, но они действительно дают представление о том, что там происходит "за кадром".
...
Рейтинг: 0 / 0
Spring Security. Авторизация.
    #39140925
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
.userDetailsService(userDatailsService)


Что это?
...
Рейтинг: 0 / 0
Spring Security. Авторизация.
    #39141042
wvetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Снимаю вопрос.
Решил проблему.
Был просто невнимателен.

Причины было две:
1) Как сказал imperfekt, пользователя с id=1 в базе не было;
2) В некоторых местах передавал int вместо long.
...
Рейтинг: 0 / 0
Spring Security. Авторизация.
    #39141043
wvetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdm
Код: java
1.
.userDetailsService(userDatailsService)


Что это?
Код: java
1.
2.
3.
4.
5.
6.
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;

@Service("userDetailsService")
public class UserDetailsServiceImpl implements UserDetailsService {
...
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Security. Авторизация.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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