Я разрабатываю веб-приложение на основе REST, в котором службы отдыха имеют интегрированный пакет Apache для выполнения базовой аутентификации и авторизации на основе ролей.Apache shiro + разрешение на уровне HTTP-метода
Теперь я хочу улучшить функциональность авторизации с настройкой разрешений на уровне метода (Micro-сервис в случае REST). Если я не ошибаюсь, Apache siro предоставляет класс HttpMethodPermissionFilter, который может использоваться как фильтр для ограничения входящих запросов на основе его метода HTTP (GET, POST, DELETE, HEAD и т. Д.), Который внутренне проверяет разрешения из таблицы role_permissions база данных, которую мы сконфигурировали, или файл конфигурации INI.
Итак, чтобы реализовать функциональность разрешений на основе метода HTTP, мне нужно внести какие-либо изменения в свой файл shiro.ini. Или у моей области jdbc есть чем заняться.
shiro.ini файл
[main]
userRoles = org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
jdbcRealm = my.custom.jdbc.realm.YhJdbcRealm
securityManager.realms = $jdbcRealm
[urls]
# Allowing login page to any user
/rest/login/** = anon
# Page 1
/rest/page1/** = noSessionCreation, authcBasic, userRoles[role1]
# page 2
/rest/page2/** = noSessionCreation, authcBasic, userRoles[role1,role2,role3]
# page 3
/yhrest/page3/** = noSessionCreation, authcBasic, userRoles[role1,role3]
/rest/** = noSessionCreation, authcBasic
пользовательских JDBC область
public class YhJdbcRealm extends JdbcRealm
{
public YhJdbcRealm()
{
loadDataSource();
}
private void loadDataSource()
{
this.dataSource = JdbcConnection.initConnection();
this.permissionsLookupEnabled = true;
this.authenticationQuery = "SELECT password FROM users WHERE username = ?";
this.userRolesQuery = "SELECT role_name FROM user_roles WHERE username = ?";
this.permissionsQuery = "SELECT permission FROM roles_permissions_temp WHERE role_name = ?";
}
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException
{
AuthenticationInfo info = super.doGetAuthenticationInfo(token);
return info;
}
}
Я новичок в Apache Shiro так что любая ссылка была бы признательна. Спасибо.
Так вы имеете в виду «ABC» является пользователем здесь, и он собирается иметь разрешения для всех CRUD для страницы 1. отлично, в каком формате или как он будет храниться в базе данных? вы можете поделиться схемой и значениями, которые мне потребуются для фактической проверки прав на конкретную страницу. –
Да, «abc» будет базовым пользовательским разрешением, я собираюсь использовать 'page1', но хотел сохранить их отдельно для объяснения. Схема зависит от вас, но, похоже, для вашего примера столбец «разрешение» отображает разрешения для ролей. Взгляните на следующие ссылки для получения дополнительной информации: [Блог о разрешениях Shiro] (https://stormpath.com/blog/protecting-jax-rs-resources-rbac-apache-shiro#authorize-the-stormtroopers- jax-rs-resource), [Широкие разрешения] (https://shiro.apache.org/permissions.html) –