나는 드롭 마법사 보안 및 인증에 관한 조사를하고있었습니다. 여기에 http://howtodoinjava.com/dropwizard/dropwizard-basic-auth-security-example/을 사용한 링크가 있습니다.Dropwizard 인증 사용자
제 질문은 VALID_USERS이 (가) 정적 최종본이며 변경할 수 없으므로 새로운 사용자를 실제로 만드는 방법입니다. 나는 데이터베이스를 만드는 것에 대해 생각하고 있었고, 그것은 사용자 이름과 역할 ex를 포함하는 사용자 객체로 구성됩니다. 관리자. (나는 암호가 필요 없다) 그러나 나는 내가 무엇을 돌려 줄 것인지 혼란스러워한다. 그들의 예에서 그들은 Optional.of를 반환했다. (새로운 User (credentials.getUsername(), VALID_USERS.get (credentials.getUsername()))); 사용자 객체를 반환하겠습니까?
본질적으로 사용자 이름으로 사용자를 인증하고 권한 부여 역할을 부여하고자합니다. 관리자, 기본. 하지만 사용자 목록과 역할 목록을 생성하는 방법을 혼란스럽게 생각합니다. 나는 데이터베이스를 만들려고 생각하고 있었지만 정확히 어떻게 구현할지는 모르겠다.
public class AppBasicAuthenticator implements Authenticator<BasicCredentials, User>
{
private static final Map<String, Set<String>> VALID_USERS = ImmutableMap.of(
"guest", ImmutableSet.of(),
"user", ImmutableSet.of("USER"),
"admin", ImmutableSet.of("ADMIN", "USER")
);
@Override
public Optional<User> authenticate(BasicCredentials credentials) throws AuthenticationException
{
if (VALID_USERS.containsKey(credentials.getUsername()) && "password".equals(credentials.getPassword()))
{
return Optional.of(new User(credentials.getUsername(), VALID_USERS.get(credentials.getUsername())));
}
return Optional.empty();
}
}
안녕하세요. 감사합니다. 저는 당신의 모범이 정말로 유용하다는 것을 알았습니다. 내가 가진 한 가지 질문은 관리자와 손님이 서로 다른 권한을 가진 두 수준의 사용자를 만드는 방법이었습니다. 당신은 저에게하는 방법에 대한 조언을 해줄 수 있습니까? – Bob
아이디어는 사용자 객체에서 문자열 모음을 사용할 수 있다는 것입니다. 문자열은 실제로 역할입니다. JPA/Hibernate는 그렇게 할 수 있습니다 (http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#collections-value). 그런 다음 Authorizer를 구현해야하며, 아래의 Dropwizard 프로젝트 예제를 참조하고 애플리케이션 클래스의 run() 메소드에 등록하십시오. 그런 다음 @RolesAllowed ("ADMIN")와 같은 역할 목록을 쉼표로 구분하여 제공하는 @RolesAllowed 주석을 사용하여 메소드를 보호 할 수 있습니다. !. – javaeeeee
공용 클래스는 ExampleAuthorizer는인가 자 { @Override 공공 부울 권한 부여 (사용자 사용자 문자열 역할) { 반환 user.getRoles()가 = 널 (null) && user.getRoles()가 (역할) 포함을 구현; } } 이것은 DropWizard 예제 응용 프로그램의 자동 실행 프로그램입니다. –
javaeeeee