Как правильно настроить spring security 6

Рейтинг: 0Ответов: 1Опубликовано: 06.08.2023

у меня есть главная страница и метод который имеет возможность добавлять текст на страницу, я хочу сделать так, что бы обычные юзеры не видели кнопку Добавить текст, как мне это сделать?

   @GetMapping("/")
    public String home(Model model) {
        model.addAttribute("text", text);
        return "index";
    }
    @PreAuthorize("hasRole('ROLE_ADMIN')")
    @PostMapping("/addText")
    public String addText(@RequestParam("text") String newText) {
        text += newText;
        return "redirect:/";
    }
}

index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Главная страница</title>
</head>
<body>
<h1>Главная страница</h1>
<p th:text="${text}"></p>
<form action="/addText" method="post">
    <input type="text" name="text" />
    <button type="submit">Добавить текст</button>
</form>
</body>
</html>


@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

    http
            .authorizeHttpRequests((requests) -> requests
                    .requestMatchers("/login**","/logout**", "/register").permitAll()
                    .requestMatchers("/one", "/addText").hasRole("ADMIN")
                    .anyRequest().authenticated()

            )
            .formLogin((form) -> form
                    .loginPage("/login")
                    .permitAll());


    return http.build();
}

Ответы

▲ 0Принят

Задача состоит из двух этапов: первый этап - скрыть саму кнопку от юзеров. Для этого можно воспользоваться Security Dialect: это выглядит так:

<div sec:authorize="hasRole('ADMIN')"><form action="/addText" method="post">
    <input type="text" name="text" />
    <button type="submit">Добавить текст</button></div>

второй этап - это закрыть вообще юзеру возможность отправлять запросы на /addText

.requestMatchers("/one", "/addText").hasRole("ADMIN")

это у вас уже реализовано