작성
·
1.1K
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
알아냈습니다...
loadUserByUsername
위 메소드는 UserDetailsService에 정의된 메소드에요
그래서 아이디를 username, 비밀번호는 password가 아닌 다른 이름, 다른 걸 받을 경우
config에 이를 명시해줘야 합니다.
명시 방법은 다음과 같아요.
.usernameParameter("userEmail")
.passwordParameter("userPassword")
저는 username이 아닌 userEmail
password가 아닌 userPassword라는 이름으로 값을 받습니다.
password라는 이름에 해당하는 값이 없으니 로그인이 안됐던 거에요..하하하하
맞습니다 ㅎㅎㅎ