Я применил public class CustomUserDetailsService implements UserDetailsService
для аутентификации входа в мое приложение mvc spring. Однако может ли UserDetailsService «отключить» учетную запись при входе в систему без удаления из таблицы базы данных?отключить аутентификацию входа в систему в Spring mvc
Например, у меня есть таблица пользователей с «именем пользователя» и «паролем» для моего входа в систему, но я не хочу удалять это из базы данных. Вместо этого у меня была другая таблица, которая соединяется с этим пользователем и имеет флаг «active», чтобы указать, что этот пользователь может войти или нет (т.е. если «active» установлен в 0, это означает, что даже если у меня есть «имя пользователя» и «имя пользователя», password "в моей базе данных, я не должен позволять этому пользователю входить в мое приложение.) Можно ли в любом случае установить любой параметр в UserDetailsService Spring, чтобы запретить этот вход?
Войти Код на основе Spring:
@Service
@Transactional(readOnly=true)
public class CustomUserDetailsService implements UserDetailsService {
@Autowired
private UserDAO userDAO;
public UserDetails loadUserByUsername(String login)
throws UsernameNotFoundException {
com.mycompany.model.User domainUser = userDAO.getUser(login);
// can I actually use any of the parameters below to disallow the above situation?
// I tried to do something like this:
// Integer active = anotherDAO.getDetails(domainUser.getId()).getActive();
// if(active == 0) enabled = false
// but my other users cannot seem to login. :(
boolean enabled = true;
boolean accountNonExpired = true;
boolean credentialsNonExpired = true;
boolean accountNonLocked = true;
return new User(
domainUser.getLogin(),
domainUser.getPassword(),
enabled,
accountNonExpired,
credentialsNonExpired,
accountNonLocked,
getAuthorities(domainUser.getRole().getId())
);
}
public Collection<? extends GrantedAuthority> getAuthorities(Integer role) {
List<GrantedAuthority> authList = getGrantedAuthorities(getRoles(role));
return authList;
}
public List<String> getRoles(Integer role) {
List<String> roles = new ArrayList<String>();
int roleValue = role.intValue();
if (role.intValue() == 1) {
roles.add("ROLE_MODERATOR");
roles.add("ROLE_ADMIN");
} else if (role.intValue() == 2) {
roles.add("ROLE_MODERATOR");
} else if (role.intValue() == 3) {
roles.add("ROLE_MODERATOR");
roles.add("ROLE_VMS");
}
return roles;
}
public static List<GrantedAuthority> getGrantedAuthorities(List<String> roles) {
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
for (String role : roles) {
authorities.add(new SimpleGrantedAuthority(role));
}
return authorities;
}
}
Параметр enabled (или accountNonLocked) для false в вашем экземпляре UserDetails должен запретить вход для этого пользователя. Вы уверены, что правильно устанавливаете активный флаг в своем комментированном коде только для пользователей, которые фактически отключены? –