@Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { Customer customer = customerService.readCustomerByUsername(username, false); if (customer == null) { throw new UsernameNotFoundException("The customer was not found"); } boolean isActive = !customer.isDeactivated(); if (Status.class.isAssignableFrom(customer.getClass())) { isActive = isActive && ((Status) customer).isActive(); } List<GrantedAuthority> grantedAuthorities = createGrantedAuthorities(roleService.findCustomerRolesByCustomerId(customer.getId())); return new CustomerUserDetails(customer.getId(), username, customer.getPassword(), isActive, true, !customer.isPasswordChangeRequired(), true, grantedAuthorities); }
@Transactional public Authentication extractAuthentication(Map<String, ?> claims) { return Optional.ofNullable(claims.get(SUB)) .map(String.class::cast) .map(subject -> StringUtils.split(subject, DELIMITER)) .map(subject -> { if (siteUserDetailsService != null && SITE_SUB_PREFIX.equals(subject[0])) { UserDetails userDetails = siteUserDetailsService.loadUserByUsername(String.valueOf(subject[1])); return new SiteAuthenticationToken(userDetails, userDetails.getPassword(), userDetails.getAuthorities()); } if (backofficeUserDetailsService != null && BACKOFFICE_SUB_PREFIX.equals(subject[0])) { UserDetails userDetails = backofficeUserDetailsService.loadUserByUsername(String.valueOf(subject[1])); return new BackofficeAuthenticationToken(userDetails, userDetails.getPassword(), userDetails.getAuthorities()); } Collection<? extends GrantedAuthority> authorities = getAuthorities(claims); return new UsernamePasswordAuthenticationToken(subject[1], "N/A", authorities); } ).orElse(null); }