Я считаю, что у меня работает базовая аутентификация, но я не уверен, как защитить ресурсы, чтобы они могли быть доступны только при входе пользователя.
public class SimpleAuthenticator implements Authenticator<BasicCredentials, User> {
UserDAO userDao;
public SimpleAuthenticator(UserDAO userDao) {this.userDao = userDao;}
@Override
public Optional<User> authenticate(BasicCredentials credentials) throws AuthenticationException
{
User user = this.userDao.getUserByName(credentials.getUsername());
if (user!=null &&
user.getName().equalsIgnoreCase(credentials.getUsername()) &&
BCrypt.checkpw(credentials.getPassword(), user.getPwhash())) {
return Optional.of(new User(credentials.getUsername()));
}
return Optional.absent();
}
}
Мой ресурс Signin выглядит так:
@Path("/myapp")
@Produces(MediaType.APPLICATION_JSON)
public class UserResource {
@GET
@Path("/signin")
public User signin(@Auth User user) {
return user;
}
}
И я подписываю пользователя с помощью:
~/java/myservice $ curl -u "someuser" http://localhost:8080/myapp/signin
Enter host password for user 'someuser':
{"name":"someuser"}
Вопрос
Скажем, пользователь подписывается из браузера или собственного мобильного приложения, используя конечную точку /myapp/signin
. Как тогда я могу защитить другую конечную точку, скажем, /myapp/{username}/getstuff
, для которой требуется, чтобы пользователь был подписан в
@GET
@Path("/myapp/{username}/getstuff")
public Stuff getStuff(@PathParam("username") String username) {
//some logic here
return new Stuff();
}