social login user resolver fix
This commit is contained in:
@@ -3,8 +3,11 @@ package io.bluemoon.authorizationserver.domain.social;
|
|||||||
import io.bluemoon.authorizationserver.config.annotation.SocialUser;
|
import io.bluemoon.authorizationserver.config.annotation.SocialUser;
|
||||||
import io.bluemoon.authorizationserver.domain.user.User;
|
import io.bluemoon.authorizationserver.domain.user.User;
|
||||||
import io.bluemoon.authorizationserver.domain.user.UserRepository;
|
import io.bluemoon.authorizationserver.domain.user.UserRepository;
|
||||||
|
import io.bluemoon.authorizationserver.domain.user.UserRole;
|
||||||
|
import io.bluemoon.authorizationserver.domain.user.UserRoleRepository;
|
||||||
import org.springframework.core.MethodParameter;
|
import org.springframework.core.MethodParameter;
|
||||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||||
|
import org.springframework.security.core.GrantedAuthority;
|
||||||
import org.springframework.security.core.authority.AuthorityUtils;
|
import org.springframework.security.core.authority.AuthorityUtils;
|
||||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
@@ -20,16 +23,24 @@ import org.springframework.web.method.support.ModelAndViewContainer;
|
|||||||
|
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class UserArgumentResolver implements HandlerMethodArgumentResolver {
|
public class UserArgumentResolver implements HandlerMethodArgumentResolver {
|
||||||
|
|
||||||
private UserRepository userRepository;
|
private UserRepository userRepository;
|
||||||
|
private UserRoleRepository userRoleRepository;
|
||||||
|
|
||||||
public UserArgumentResolver(UserRepository userRepository) {
|
public UserArgumentResolver(
|
||||||
|
UserRepository userRepository,
|
||||||
|
UserRoleRepository userRoleRepository
|
||||||
|
) {
|
||||||
this.userRepository = userRepository;
|
this.userRepository = userRepository;
|
||||||
|
this.userRoleRepository = userRoleRepository;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -70,8 +81,18 @@ public class UserArgumentResolver implements HandlerMethodArgumentResolver {
|
|||||||
user = userRepository.findByEmail(convertUser.getEmail());
|
user = userRepository.findByEmail(convertUser.getEmail());
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
user = userRepository.save(convertUser);
|
user = userRepository.save(convertUser);
|
||||||
|
UserRole userRole = UserRole.builder()
|
||||||
|
.role("USER")
|
||||||
|
.user(user)
|
||||||
|
.build();
|
||||||
|
UserRole userRoles = userRoleRepository.save(userRole);
|
||||||
|
|
||||||
}
|
}
|
||||||
setRoleIfNotSame(user, authentication, map);
|
|
||||||
|
List<UserRole> userRoles = userRoleRepository.findByUser(user);
|
||||||
|
// role 부여
|
||||||
|
|
||||||
|
setRoleIfNotSame(user, authentication, map, userRoles);
|
||||||
session.setAttribute("user", user);
|
session.setAttribute("user", user);
|
||||||
} catch (ClassCastException e) {
|
} catch (ClassCastException e) {
|
||||||
return user;
|
return user;
|
||||||
@@ -139,7 +160,7 @@ public class UserArgumentResolver implements HandlerMethodArgumentResolver {
|
|||||||
* @param authentication
|
* @param authentication
|
||||||
* @param map
|
* @param map
|
||||||
*/
|
*/
|
||||||
private void setRoleIfNotSame(User user, OAuth2AuthenticationToken authentication, Map<String, Object> map) {
|
private void setRoleIfNotSame(User user, OAuth2AuthenticationToken authentication, Map<String, Object> map, List<UserRole> userRoles) {
|
||||||
Map<String, Object> principalMap = new HashMap<>();
|
Map<String, Object> principalMap = new HashMap<>();
|
||||||
if (user.getSocialType().getVaule().equals("google")) {
|
if (user.getSocialType().getVaule().equals("google")) {
|
||||||
principalMap.put("id", map.get("sub"));
|
principalMap.put("id", map.get("sub"));
|
||||||
@@ -151,12 +172,30 @@ public class UserArgumentResolver implements HandlerMethodArgumentResolver {
|
|||||||
|
|
||||||
// spring security authentiaction params setting
|
// spring security authentiaction params setting
|
||||||
// 후.. 찾기 힘들었다..
|
// 후.. 찾기 힘들었다..
|
||||||
if (!authentication.getAuthorities().contains(
|
// if (!authentication.getAuthorities().contains(
|
||||||
new SimpleGrantedAuthority(user.getSocialType().getRoleType()))) {
|
// new SimpleGrantedAuthority(user.getSocialType().getRoleType()))) {
|
||||||
SecurityContextHolder.getContext().setAuthentication(
|
// SecurityContextHolder.getContext().setAuthentication(
|
||||||
new UsernamePasswordAuthenticationToken(principalMap, "N/A", AuthorityUtils.createAuthorityList(user.getSocialType().getRoleType()))
|
// new UsernamePasswordAuthenticationToken(principalMap, "N/A", AuthorityUtils.createAuthorityList(user.getSocialType().getRoleType()))
|
||||||
);
|
// );
|
||||||
|
// }
|
||||||
|
|
||||||
|
// social default user role
|
||||||
|
if (userRoles != null) {
|
||||||
|
List<GrantedAuthority> authoritiesRole = new ArrayList<>(userRoles.size());
|
||||||
|
for (UserRole ur : userRoles) {
|
||||||
|
authoritiesRole.add(new SimpleGrantedAuthority(ur.getRole()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!authentication.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_USER"))) {
|
||||||
|
|
||||||
|
SecurityContextHolder.getContext().setAuthentication(
|
||||||
|
new UsernamePasswordAuthenticationToken(principalMap, "N/A", authoritiesRole)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(principalMap, "N/A", AuthorityUtils.createAuthorityList("ROLE_NONE")));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ public class CustomUserDetailsServiceImpl implements UserDetailsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
CustomUserDetails userDetail = new CustomUserDetails(user, urs);
|
CustomUserDetails userDetail = new CustomUserDetails(user, urs);
|
||||||
userDetail.getAuthorities();
|
|
||||||
System.out.println(userDetail);
|
System.out.println(userDetail);
|
||||||
return userDetail;
|
return userDetail;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user