23.07.11 18:27 작성
·
993
0
SecurityConfig.java
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final SecurityDetailsService securityDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// .csrf().disable()
.authorizeRequests()
.antMatchers("/user/**").authenticated()
.antMatchers("/admin/**").access("hasRole('ADMIN')")
.anyRequest().permitAll()
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/login")
.defaultSuccessUrl("/home")
.usernameParameter("userEmail")
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login")
;
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
SecurityDetails.java
@RequiredArgsConstructor
public class SecurityDetails implements UserDetails {
private final UserEntity userEntity;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Collection<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(new GrantedAuthority() {
@Override
public String getAuthority() {
return userEntity.getAuthority().toString();
}
});
return authorities;
}
@Override
public String getPassword() {
return userEntity.getUserPassword();
}
@Override
public String getUsername() {
return userEntity.getUserEmail();
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
SecurityDetailsService.java
@Service
@RequiredArgsConstructor
public class SecurityDetailsService implements UserDetailsService {
private final UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String userEmail) throws UsernameNotFoundException {
UserEntity userEntity = userRepository.findByUserEmail(userEmail);
if(userEntity != null) return new SecurityDetails(userEntity);
return null;
}
}
SecurityDetails에서 return값이 boolean인 override 받는 메소드들 다 true로 해줬고
login페이지나 home페이지에는 이미지도 없어서 문제될 게 없다고 생각되는데
도통 이유를 모르겠습니다ㅠㅠㅠ
답변 1
0
2023. 07. 11. 23:07
알아냈습니다...
loadUserByUsername
위 메소드는 UserDetailsService에 정의된 메소드에요
그래서 아이디를 username, 비밀번호는 password가 아닌 다른 이름, 다른 걸 받을 경우
config에 이를 명시해줘야 합니다.
명시 방법은 다음과 같아요.
.usernameParameter("userEmail")
.passwordParameter("userPassword")
저는 username이 아닌 userEmail
password가 아닌 userPassword라는 이름으로 값을 받습니다.
password라는 이름에 해당하는 값이 없으니 로그인이 안됐던 거에요..하하하하
2023. 07. 20. 17:48
맞습니다 ㅎㅎㅎ