В контроллере Spring 3, как я могу проверить разрешения вошедшего в систему пользователя и выполнить определенные действия условно? - PullRequest
1 голос
/ 25 июня 2011

В Spring 3, есть ли метод, который принимает список разрешений через запятую и возвращает логическое значение того, имеет ли вошедший в систему пользователь какие-либо из этих разрешений?Я предполагаю сделать что-то вроде:

if(loggedInUserHasAnyOfThesePermissions("PERMISSION_READ,PERMISSION_EDIT")){
    //do stuff
}

В настоящее время, так как не знаю ни одного такого встроенного метода, я делаю это:

Set<String> permissions = new HashSet();
for (GrantedAuthority auth : SecurityContextHolder.getContext().getAuthentication().getAuthorities()) {
    permissions.add(auth.getAuthority());
}

if (permissions.contains("PERMISSION_READ") || permissions.contains("PERMISSION_EDIT")) {
    //do stuff
}

Я искалчасов и не нашли более краткий и элегантный способ сделать это, но нужно существовать.Спасибо за вашу помощь!

PS Я уже знаком с тем, как обрабатывать разрешения в JSP следующим образом: ( как условно показывать контент jsp для зарегистрированных пользователей с Spring security ) Но чтоМне нужен сейчас способ проверки внутри контроллера.

Ответы [ 5 ]

0 голосов
/ 01 октября 2011

Я закончил программировать свой собственный класс: класс MyUserDetails имеет различные методы, в том числе один, который перебирает роли и разрешения, чтобы увидеть все разрешения, которые есть у пользователя, такие как:

for (Permission permission : role.getPermissions()) {
          permissions.add(new GrantedAuthorityImpl(permission.getName()));
        }

Это довольно уродливо, но у меня пока нет лучшего способа.

Я использую это, делая что-то вроде:

MyUser loggedInUser = myUserDAO.getByUsername(principal.getName());
MyUserDetails loggedInUserUD = new MyUserDetails(loggedInUser);
if (loggedInUserUD.hasAnyPermission("perm1, perm2")){
//do stuff
}
0 голосов
/ 29 июня 2011

В Spring 3 есть метод, который принимает разделенный запятыми список разрешений и возвращает логическое значение того, имеет ли зарегистрированный пользователь какие-либо из этих разрешений?

Являетесь ли выговорить о ExpressionUtils , который может оценивать такие выражения, как hasAnyRole([role1,role2])?

0 голосов
/ 26 июня 2011

Вы можете использовать Spring security , а затем использовать Pre и Post Annotations , который работает на уровне метода.

Фактическая логика предварительных аннотаций, вероятно, доступна, так что вы, вероятно, можете выполнить то, что вы хотите.

0 голосов
/ 27 июня 2011

В HttpServletRequest есть метод isUserInRole, который может быть полезен.Пример:

public String someControllerMethod(HttpServletRequest request, ...) {
   boolean read = request.isUserInRole("PERMISSION_READ");
   ...
}
0 голосов
/ 26 июня 2011

В Spring 3, есть ли метод, который принимает список разрешений через запятую и возвращает логическое значение того, имеет ли вошедший в систему пользователь какие-либо из этих разрешений?

Нет, нет.

В итоге я определил и реализовал свой собственный удобный API для подобных вещей.

...