Spring Security - класс реализации UserDetailsService не вызывается при входе в систему с углового клиента 4 - PullRequest
0 голосов
/ 24 октября 2018

Я защищаю свое весеннее приложение с помощью весенней защиты.Я реализовал UserDetailService для аутентификации пользователя.При входе из Angular 4 UserDetailService не вызывается и пользователь не обнаруживается.

Причина, по которой я обнаружил, заключается в том, что я не использовал formLogin () в SecurityConfig.java.Для этого я добавил httpBasic (), но он не работает.Отсутствуют ли какие-либо конфигурации?

SecurityConfig.java

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private LoginUserDetailService loginUserDetailService;

    @Autowired
    private BCryptPasswordEncoder bCryptPasswordEncoder;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        auth.userDetailsService(loginUserDetailService).passwordEncoder(bCryptPasswordEncoder);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.cors().and()
        .authorizeRequests()
        .antMatchers("/login","/logout", "/home").permitAll()
        .anyRequest().fullyAuthenticated().and()
        .logout()
        .permitAll()
        .logoutRequestMatcher(new AntPathRequestMatcher("/logout", "POST"))
        .and()
        .httpBasic().and()
        .csrf().disable();
    }

    @Override
    public void configure(WebSecurity web) throws Exception {

        web.ignoring().antMatchers("/resources/**", "/static/**", "/css/**", "/js/**", "/images/**");

    }

}

Контроллер

@RequestMapping("/login")
    public Principal user(Principal principal) {
        logger.info("user logged " + principal);
        return principal;
    }

LoginUserDetailService

@Service("loginUserDetailService")
public class LoginUserDetailService implements UserDetailsService {

    @Autowired
    UserRepository userRepository;

    @Override
    @Transactional
    public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
        System.out.println("Login User Detail Service");
        System.out.println("email: "+email);
        UserEntity user = userRepository.findByEmail(email);
        if (user != null) {
            System.out.println("User found ");
        }
        else {
            System.out.println("User not found");
        }
        Set<GrantedAuthority> authorities = getUserAuthority(user.getRoles());
        System.out.println("Authorities of user : " + email);
        authorities.forEach(a -> System.out.println(a));

        return buildUserForAuthentication(user, authorities);
    }

    private Set<GrantedAuthority> getUserAuthority(Set<RoleEntity> userRoles) {
        System.out.println("Roles: ");
        for(RoleEntity role : userRoles) {
            System.out.println(role);
        }
        Set<GrantedAuthority> authorities = new HashSet<GrantedAuthority>();
        for (RoleEntity role : userRoles) {
            authorities.add(new SimpleGrantedAuthority(role.getRole()));
            role.getPermissions().stream().map(p -> new SimpleGrantedAuthority(p.getPermission()))
                    .forEach(authorities::add);
        }
        System.out.println("Authorities :");
        for(GrantedAuthority authority : authorities)
        {
            System.out.println(authority);
        }

        return authorities;
    }

    private UserDetails buildUserForAuthentication(UserEntity user, Set<GrantedAuthority> authorities) {
        return new org.springframework.security.core.userdetails.User(user.getEmail(), user.getPassword(),
                user.getActive(), true, true, true, authorities);
    }
}

Журнал

2018-10-24 12:45:26.532  INFO 9660 --- [nio-8080-exec-2] c.m.c.AuthenticationController           : user logged null

1 Ответ

0 голосов
/ 30 октября 2018

Это решается передачей учетных данных пользователя в заголовке запроса метода http GET вместо передачи учетных данных в виде тела метода HTTP POST от углового клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...