//JPA Naming 쿼리
//SELECT * FROM user WHERE username = ? AND password = ?;
User findByUsernameAndPassword(String username, String password);
전통적인 로그인 방식(세션에 저장해서 사용하는 방식)
@PostMapping("/api/user/login")
public ResponseDto<Integer> login(@RequestBody User user, HttpSession session) {
User principal = userService.login(user);
if(principal != null) {
session.setAttribute("principal", principal);
}
return new ResponseDto<Integer>(HttpStatus.OK.value(), 1);
}
스프링 시큐리티 로그인 방식
pom.xml 라이브러리만 추가하면 된다.
세션이 자동으로 생성, 토큰값으로 로그인이 된다.
<%@ taglib prefix = "sec" uri = "http://www.springframework.org/security/tags" %>
<sec:authorize access="isAuthenticated()">
<sec:authentication property="principal" var="principal" />
</sec:authorize>
스프링 시큐리티가 로그인 요청을 가로채서 로그인을 진행하고 완료가 되면 UserDetail타입의 오브젝트를 스프링 시큐리티의 고유한 세션저장소에 저장해주는 Config의 목록을 반환해주는 메소드
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Collection<GrantedAuthority> collectors = new ArrayList<>();
collectors.add(new GrantedAuthority() {
@Override
public String getAuthority() {
return "ROLE_" + user.getRole();
}
});
return collectors;
}
람다식으로 변환
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Collection<GrantedAuthority> collectors = new ArrayList<>();
collectors.add(()->{return "ROLE_" + user.getRole();});
return collectors;
}
참조
https://www.youtube.com/watch?v=olaeVwjx3J8&list=PL93mKxaRDidECgjOBjPgI3Dyo8ka6Ilqm&index=25
https://getinthere.tistory.com/category/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8%20with%20JPA%20%EB%B8%94%EB%A1%9C%EA%B7%B8