Используйте HandlerMethodArgumentResolver , чтобы позволить Spring внедрить GrantedAuthority в методе контроллера. Если у пользователя может быть несколько прав доступа, вам потребуется создать класс для хранения прав пользователя (можно назвать GrantedAuthorities
). После того, как вы закончите, ваш метод контроллера будет выглядеть примерно так:
@RequestMapping({"/xyz"})
public String handleXYZRequest(GrantedAuthorities authorities) {
/* use authorities if not null */
...
}
В resolver вы будете использовать тот же код, который вы используете в настоящее время для получения прав доступа, и он вернет либо нулевой, либо GrantedAuthorities
объект. Если вы используете более старую версию Spring, используйте WebArgumentResolver
и зарегистрируйте ее в AnnotationMethodHandlerAdapter.
Приведенный выше подход позволяет избежать дублирования кода и может использоваться для внедрения всего, что вам нужно из SecurityContextHolder
в методы контроллера.
Редактировать
Это похоже на подход, используемый теплицей. См. WebConfig , где принципал (который является объектом Account) вводится в контроллер через преобразователь аргументов.