Example)
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Override
protected void configure(HttpSecurity http) throws Exception{
http
.authorizeRequests()
.antMatchers("/", "/user/joinForm").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/user/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth)
throws Exception{
auth.jdbcAuthentication()
.dataSource(dataSource)
.passwordEncoder(passwordEncoder())
.usersByUsernameQuery("select username, password, enabled "
+"from user "
+"where username = ?")
.authoritiesByUsernameQuery("select u.username, r.name "
+"from user_role ur inner join user u on ur.user_id = u.id "
+"inner join role r on ur.role_id=r.id "
+"where u.username=?");
}
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
.antMatchers("/", "/user/joinForm").permitAll()
로그인을 하지 않아도 접근할 수 있는 url을 넣어준다.
/는 홈이고, /user/joinForm은 회원가입 페이지다.
.usersByUsernameQuery("select username, password, enabled "
+"from user "
+"where username = ?")
.authoritiesByUsernameQuery("select u.username, r.name "
+"from user_role ur inner join user u on ur.user_id = u.id "
+"inner join role r on ur.role_id=r.id "
+"where u.username=?");
쿼리문에서 컬럼명을 username, password, enabled로 하자.
username를 user_id로 하니까 에러는 안 뜨는데 로그인이 안 되었다.
@PostMapping("/user/login")
public String login(String userId, String password, HttpSession session){
Optional<User> user=userRepository.findByUserId(userId);
if(user.isEmpty()){
System.out.println("Login Failure!");
return "redirect:/user/loginForm";
}
if(!user.get().getPassword().equals(password)){
System.out.println("Login Failure!");
return "redirect:/user/loginForm";
}
System.out.println("Login Success!");
session.setAttribute("user", user);
return "redirect:/";
}
처음에는 스프링 시큐리티를 안 쓰고 위와 같이 로그인 기능을 구현했다.
로그인, 로그아웃 버튼 중 하나만 보이게 구현하는 과정에서 스프링 시큐리티가 필요했다.
참고 👉
https://jithub.tistory.com/344
https://docs.spring.io/spring-security/reference/reactive/integrations/cors.html
반응형
'Framework > Spring Boot' 카테고리의 다른 글
Spring Security 사용자 id 가져오기 (0) | 2021.11.25 |
---|---|
[ERROR] EL1004E: Method call: Method hasError(java.lang.String) cannot be found on type org.thymeleaf.spring5.expression.Fields (0) | 2021.11.25 |
Spring Security 기본 로그인 화면 제거 (2) | 2021.11.02 |
[Error] Error creating bean with name 'thymeleafViewResolver' defined in class path resource (0) | 2021.10.24 |
[Error] spelevaluationexception (0) | 2021.10.13 |