Вы можете ограничить функционал на разных уровнях.
Например, можно ограничить функционал на уровне шаблона. Если вы используете шаблонизатор thymeleaf, то скорее вам понадобится добавить в Gradle || Maven -
implementation group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-springsecurity5', version: '3.0.4.RELEASE'
А дальше уже в шаблон вставить -
sec:authorize="hasAuthority('ADMIN')"
Например,
<div class="dashboard_rules" sec:authorize="hasAuthority('ADMIN')">
<!-- Увидит только админ-->
</div>
Также можно на уровне контроллера ограничить доступ:
@PreAuthorize("hasAuthority('ADMIN')")
Как в зависимости от роли пользователя, после удачного входа подгружать index.html с разным наполнением?
Я обычно, делаю следующим образом:
После авторизации получаю текущего авторизованного юзера
@AuthenticationPrincipal UserDetails currentUser
Нахожу юзера и проверяю его права:
User user = (User) userService.findUserByEmail(currentUser.getUsername());
Через if() {} else {} отдаю тот или иной контент.
Например,
@GetMapping("/dashboard")
public String dashboard(
@AuthenticationPrincipal UserDetails currentUser,
Model model
) {
model.addAttribute("pageTitle","Панель управления");
User user = (User) userService.findUserByEmail(currentUser.getUsername());
if(user.isAdmin()) {
model.addAttribute("posts", posts.getAdminPosts());
} else {
model.addAttribute("posts", posts.getUserPosts());
}
return "backend/dashboard";
}