Управление доступом на основе ролей с помощью Spring MVC - PullRequest
7 голосов
/ 24 августа 2011

Хотелось бы узнать лучшие практики для управления доступом на основе ролей с пружиной.

Мои требования:

Мне будет назначен набор ролей, скажем,

user1 = admin, user2 = expert

user1 будет иметь доступ с правами доступа, например

/ admin / member-management

/ admin / project-management

......

для user2 ....

/ myproject1 / *

, поэтому, если user2 пытается доступURL

/ admin / member-management

будет перенаправлен на страницу ошибки авторизации.

Ответы [ 3 ]

6 голосов
/ 24 августа 2011

Стандартная среда для использования с Spring MVC - Spring Security . Хотя это может быть очень сложно, вот минимальная версия того, что вам нужно: 4.2.2 Минимальная конфигурация

В вашем случае конфигурация будет выглядеть примерно так:

<http auto-config='true'>
    <intercept-url pattern="/admin/**" access="ROLE_ADMIN" />
</http>
4 голосов
/ 24 августа 2011

Spring Security имеет понятие ролей, но из коробки у него нет понятия разрешений. У него есть концепция ACL , но эти ACL намного сложнее, чем разрешения, и они связаны с воздействием на конкретные объекты, а не с авторизацией действий в целом.

Взгляните на Apache Shiro . Он имеет роли и разрешений , которые очень похожи на то, что вы дали в качестве примера (с использованием подстановочных знаков). Также прост в использовании с Spring .

0 голосов
/ 28 мая 2018
public class DashBoardController {

@Autowired
UserService userService;

private static final Logger logger = LoggerFactory.getLogger(DashBoardController.class);

@SuppressWarnings("unchecked")
@RequestMapping(value = PathProxy.DashBoardUrls.SHOW_DASHBOARD, method = RequestMethod.GET)
public String role(Locale locale, Model model) {
    String userRole = null;
    logger.info("dashboard Controller");
    Collection<SimpleGrantedAuthority> authorities = (Collection<SimpleGrantedAuthority>) SecurityContextHolder
            .getContext().getAuthentication().getAuthorities();
    for (SimpleGrantedAuthority simpleGrantedAuthority : authorities) {
        userRole = simpleGrantedAuthority.toString();
    }

    switch (userRole) {

    case "ROLE_ADMIN":

        return "dashboard/admin";

    case "ROLE_HR_MANAGER":

        return "dashboard/hr_manager";

    case "ROLE_MANAGER":

        return "dashboard/manager";

    case "ROLE_EMPLOYEE":

        return "dashboard/employee";

    case "ROLE_COMPANY_ADMIN":

        return "dashboard/admin";

    default:

        break;
    }

    return userRole;

}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...