You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
4.5 KiB
127 lines
4.5 KiB
package org.ros.chatto.security;
|
|
|
|
import java.util.List;
|
|
import java.util.stream.Collector;
|
|
import java.util.stream.Collectors;
|
|
|
|
import javax.annotation.PostConstruct;
|
|
import javax.validation.constraints.Size;
|
|
|
|
import org.ros.chatto.model.ChatUser;
|
|
import org.ros.chatto.model.UserRole;
|
|
import org.ros.chatto.repository.RoleRepository;
|
|
import org.ros.chatto.repository.UserRepository;
|
|
import org.ros.chatto.repository.UserRoleRepository;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.cache.CacheManager;
|
|
import org.springframework.cache.Cache.ValueWrapper;
|
|
import org.springframework.cache.annotation.Cacheable;
|
|
import org.springframework.security.core.userdetails.User;
|
|
import org.springframework.security.core.userdetails.UserCache;
|
|
import org.springframework.security.core.userdetails.UserDetails;
|
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
|
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.web.context.WebApplicationContext;
|
|
|
|
@Service
|
|
public class MyUserDetailsService implements UserDetailsService {
|
|
|
|
// @Autowired
|
|
// private WebApplicationContext applicationContext;
|
|
@Autowired
|
|
private UserRepository userRepository;
|
|
|
|
// @Autowired
|
|
// private RoleRepository roleRepository;
|
|
|
|
@Autowired
|
|
private UserRoleRepository userRoleRepository;
|
|
|
|
// @Autowired
|
|
// private UserCache userCache;
|
|
|
|
@Autowired
|
|
private CacheManager cacheManager;
|
|
|
|
// @Autowired
|
|
// private UserCache userCache;
|
|
// @PostConstruct
|
|
// public void completeSetup() {
|
|
// userRepository = applicationContext.getBean(UserRepository.class);
|
|
// }
|
|
|
|
public MyUserDetailsService() {
|
|
super();
|
|
}
|
|
|
|
@Override
|
|
// @Cacheable(value="chatUser")
|
|
public UserDetails loadUserByUsername(String username) {
|
|
// ChatUser user = userRepository.findByUserName(username);
|
|
|
|
List<UserRole> userRoles = userRoleRepository.findByUser(username);
|
|
// @SuppressWarnings("unchecked")
|
|
// List<UserRole> userRoles = (List<UserRole>)cacheManager.getCache(username);
|
|
// if((userRoles == null)) {
|
|
// userRoles = userRoleRepository.findByUser(username);
|
|
// }
|
|
// UserDetails userDetails = (UserDetails) cacheManager.getCache(username);
|
|
// if((userDetails == null)) {
|
|
// user = userRoleRepository.findByUser(username);
|
|
// }
|
|
System.out.println("Test from userdetails");
|
|
|
|
ValueWrapper valueWrapper = cacheManager.getCache("chatUser").get("hmm");
|
|
if (valueWrapper != null) {
|
|
UserDetails userDetails = (UserDetails) valueWrapper.get();
|
|
if (userDetails != null) {
|
|
System.out.println("cache username = " + userDetails.getUsername());
|
|
System.out.println("cache password = " + userDetails.getPassword());
|
|
}
|
|
}
|
|
if (userRoles.size() == 0) {
|
|
throw new UsernameNotFoundException(username);
|
|
}
|
|
// System.out.println("Found useeeeeeeeeeeeeeeeeeeeeeeeeeeeeeer " + user.getUserName() + user.getPassword());
|
|
|
|
// ChatUser user2 = userRoles.get(0).getUser();
|
|
// System.out.println("User role iddddddddddddddddd = " + userRoles.get(0).getRole().getName());
|
|
// System.out.println(userRoles.);
|
|
// return new MyUserPrincipal(user);
|
|
// return toUserDetails(new UserObject(user.getUserName(), user.getPassword(), userRoles.get(0).getRole().getName()));
|
|
// return User.withUsername(user.getUserName()).password(user.getPassword())
|
|
// .roles(
|
|
// user.getUserRoles()
|
|
// .stream()
|
|
// .map(userRole -> {
|
|
// System.out.println("role = " + userRole.getRole().getName());
|
|
// return userRole.getRole().getName();
|
|
// })
|
|
// .toArray(size -> new String[size])
|
|
// )
|
|
// .build();
|
|
ChatUser user = userRoles.get(0).getUser();
|
|
return User.withUsername(user.getUserName()).password(user.getPassword())
|
|
.roles(userRoles.stream().map(userRole -> {
|
|
System.out.println("role = " + userRole.getRole().getName());
|
|
return userRole.getRole().getName();
|
|
}).toArray(size -> new String[size])).build();
|
|
}
|
|
|
|
private UserDetails toUserDetails(UserObject userObject) {
|
|
return User.withUsername(userObject.name).password(userObject.password).roles(userObject.role).build();
|
|
}
|
|
|
|
private static class UserObject {
|
|
private String name;
|
|
private String password;
|
|
private String role;
|
|
|
|
public UserObject(String name, String password, String role) {
|
|
this.name = name;
|
|
this.password = password;
|
|
this.role = role;
|
|
}
|
|
}
|
|
}
|