글의 조회수 기능을 구현하고 있다. 다음과 같은 방식으로 세션과 addAttribute를 활용하면 구현할 수 있다고 생각했다.
String viewKey = "_q"+id;
if(!isHit(req,viewKey)){ //현재 세션으로 처음 방문
//조회수 증가
}
private boolean isHit(HttpServletRequest req, String viewKey){
return (String)req.getSession().getAttribute(viewKey) != null;
}
// 현재 세션으로 페이지에 처음 접속한다면 viewKey를 key로 추가
private void setHit(HttpServletRequest req, String viewKey){
req.getSession().setAttribute(viewKey,true);
}
다른 로그인 방식으로 로그인 한 같은 사용자가 세션을 서로 공유하게 해야 한다.
- 위 포스트에서 서로 다른 로그인 방식으로 로그인 한 사용자는 서로 다른 사용자로 취급하기로 하였다.
https://github.com/hanbonghun/spring-QA-board/commit/a1ddb8f31c82959d67fba7f3024ec0d210364b71
http 요청이 들어온다
http.authorizeHttpRequests()를 통해 설정된 체인을 거친다
AuthenticationManager가 인증 요청을 처리할 수 있는 provider를 찾는다
해당 provider는 인증 방식에 맞는Service를 수행하여 인증에 성공한 User를 반환한다
DefaultOAuth2UserService나 UserDetailsService를 구현하고 해당 인터페이스의 메서드를 구현하여 사용하는 것은, Authentication Provider가 인증을 어떻게 처리할지에 대한 명세
AuthenticationManager은 이러한 인증 Provider 중 적절한 Provider를 선택하여 인증을 수행
@Bean
AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
Oauth2 동작 과정 : https://lotuus.tistory.com/83
구글 로그인 : https://lotuus.tistory.com/79
Form, Oauth2 로그인 구현 : https://lotuus.tistory.com/78
WEB2 - Oauth2 : https://www.youtube.com/watch?v=hm2r6LtUbk8&t=3s