mirror of https://github.com/halo-dev/halo
Fix the problem that the username does not exist when the username does not exist (#4070)
#### What type of PR is this? /kind bug /area core #### What this PR does / why we need it: Catch UserNotFoundException instead of ExtensionNotFoundException to map correctly to BadCredentialsException. #### Which issue(s) this PR fixes: Fixes https://github.com/halo-dev/halo/issues/4057 #### Special notes for your reviewer: 1. Start Halo 2. Login with an username which does not exist 3. Check the response #### Does this PR introduce a user-facing change? ```release-note 修复登录时出现用户名不存在的问题。 ```pull/4061/head
parent
ecc617c709
commit
aaa3548c97
|
@ -15,7 +15,7 @@ import run.halo.app.core.extension.RoleBinding.Subject;
|
||||||
import run.halo.app.core.extension.service.RoleService;
|
import run.halo.app.core.extension.service.RoleService;
|
||||||
import run.halo.app.core.extension.service.UserService;
|
import run.halo.app.core.extension.service.UserService;
|
||||||
import run.halo.app.extension.GroupKind;
|
import run.halo.app.extension.GroupKind;
|
||||||
import run.halo.app.extension.exception.ExtensionNotFoundException;
|
import run.halo.app.infra.exception.UserNotFoundException;
|
||||||
|
|
||||||
public class DefaultUserDetailService
|
public class DefaultUserDetailService
|
||||||
implements ReactiveUserDetailsService, ReactiveUserDetailsPasswordService {
|
implements ReactiveUserDetailsService, ReactiveUserDetailsPasswordService {
|
||||||
|
@ -38,6 +38,8 @@ public class DefaultUserDetailService
|
||||||
@Override
|
@Override
|
||||||
public Mono<UserDetails> findByUsername(String username) {
|
public Mono<UserDetails> findByUsername(String username) {
|
||||||
return userService.getUser(username)
|
return userService.getUser(username)
|
||||||
|
.onErrorMap(UserNotFoundException.class,
|
||||||
|
e -> new BadCredentialsException("Invalid Credentials"))
|
||||||
.flatMap(user -> {
|
.flatMap(user -> {
|
||||||
var subject = new Subject(KIND, username, GROUP);
|
var subject = new Subject(KIND, username, GROUP);
|
||||||
return roleService.listRoleRefs(subject)
|
return roleService.listRoleRefs(subject)
|
||||||
|
@ -49,9 +51,7 @@ public class DefaultUserDetailService
|
||||||
.password(user.getSpec().getPassword())
|
.password(user.getSpec().getPassword())
|
||||||
.roles(roleNames.toArray(new String[0]))
|
.roles(roleNames.toArray(new String[0]))
|
||||||
.build());
|
.build());
|
||||||
})
|
});
|
||||||
.onErrorMap(ExtensionNotFoundException.class,
|
|
||||||
e -> new BadCredentialsException("Invalid Credentials"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isRoleRef(RoleRef roleRef) {
|
private boolean isRoleRef(RoleRef roleRef) {
|
||||||
|
|
|
@ -5,7 +5,6 @@ import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
import static run.halo.app.extension.GroupVersionKind.fromExtension;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
@ -27,7 +26,7 @@ import run.halo.app.core.extension.RoleBinding.Subject;
|
||||||
import run.halo.app.core.extension.service.RoleService;
|
import run.halo.app.core.extension.service.RoleService;
|
||||||
import run.halo.app.core.extension.service.UserService;
|
import run.halo.app.core.extension.service.UserService;
|
||||||
import run.halo.app.extension.Metadata;
|
import run.halo.app.extension.Metadata;
|
||||||
import run.halo.app.extension.exception.ExtensionNotFoundException;
|
import run.halo.app.infra.exception.UserNotFoundException;
|
||||||
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
class DefaultUserDetailServiceTest {
|
class DefaultUserDetailServiceTest {
|
||||||
|
@ -164,8 +163,7 @@ class DefaultUserDetailServiceTest {
|
||||||
@Test
|
@Test
|
||||||
void shouldNotFindUserDetailsByNonExistingUsername() {
|
void shouldNotFindUserDetailsByNonExistingUsername() {
|
||||||
when(userService.getUser("non-existing-user")).thenReturn(
|
when(userService.getUser("non-existing-user")).thenReturn(
|
||||||
Mono.error(() -> new ExtensionNotFoundException(
|
Mono.error(() -> new UserNotFoundException("non-existing-user")));
|
||||||
fromExtension(run.halo.app.core.extension.User.class), "non-existing-user")));
|
|
||||||
|
|
||||||
var userDetailsMono = userDetailService.findByUsername("non-existing-user");
|
var userDetailsMono = userDetailService.findByUsername("non-existing-user");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue