я использую Гобелен-Security, которая использует Apache ShiroShiro авторизации заселить авторизации с удаленными ролями
У меня есть пользовательская область, которая обрабатывает авторизацию и аутентификацию. Наша аутентификация технически происходит с использованием удаленной службы, которая возвращает имя пользователя и набор ролей. Я просто передаю имя пользователя в свой собственный AuthenticationToken, который позволяет мне запрашивать наш локальный db и устанавливать SimpleAuthenticationInfo.
Я не могу понять, как заполнить метод AuthorizationInfo doGetAuthorizationInfo, используя список ролей, возвращенных мне из нашей удаленной службы. Ниже приведен код, который я использую для заполнения области.
Login.class
//Remote authentication service
RemoteLoginClient client = new RemoteLoginClient();
RemoteSubject authenticate = client.authenticate(username, password);
//tapestry security authentication
Subject currentUser = SecurityUtils.getSubject();
CustomAuthenticationToken token = new
CustomAuthenticationToken(authenticate.getUsername());
System.out.println("roles" + authenticate.getRoles());
currentUser.login(token);
метод AuthorizationInfo внутри customRealm общественного класс CustomRealm расширяет AuthorizingRealm {
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
CustomAuthenticationToken upToken = (CustomAuthenticationToken) token;
String email = upToken.getUsername();
ApplicationUser applicationUser = (ApplicationUser) session.createCriteria(ApplicationUser.class)
.add(Restrictions.like("email", email + "%"))
.uniqueResult();
if (applicationUser == null) {
throw new UnknownAccountException("User doesn't exist in EPRS database");
}
return buildAuthenticationInfo(applicationUser.getId());
}
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
//Not sure how to populate the principle or
//read the principle to populate the SimpleAuthorizationInfo
return new SimpleAuthorizationInfo(roleNames);
}
Несколько недель назад я записывала, как бороться с Сиро и Guice. Однако не могли бы вы проверить, будет ли в разделе «Реализация королевств» ваш вопрос - http://readyareyou.blogspot.de/2012/03/guice-jersey-shiro.html? – PepperBob
@PepperBob Спасибо за ответ, мне кажется, пример в ссылке, которую вы мне предоставили, все еще использует базу данных для поиска ролей пользователей. В моем сценарии роли предоставляются мне в списке из нашего веб-сервиса при входе в систему. Я бы хотел, чтобы передать этот список ролей в SimpleAuthorizationInfo, где я сейчас потерян. Какие-нибудь дополнительные мысли? –
Я думаю, что вы должны быть в состоянии вставить все в реализацию интерфейса учетной записи (http://shiro.apache.org/static/current/apidocs/org/apache/shiro/authc/Account.html), поскольку он связывает Аутентификация и авторизация, например. SimpleAccount или что-то сделанное на заказ. – PepperBob