Spring Security + Thymeleaf - скрыть определенные данные от пользователя, если он не аутентифицирован

Я думаю, Thymeleaf не знает, когда пользователь вошел в систему, я скрыл два тега <a> от пользователей с аутентифицированный, но они все еще отображаются.

pom.xml :

    <dependency>
        <groupId>org.thymeleaf.extras</groupId>
        <artifactId>thymeleaf-extras-springsecurity4</artifactId>
        <version>3.0.4.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

Here's the code for problem - hidding two anchor tags from users who are authenticated :

<html lang = "en" xmlns:th = "http://www.thymeleaf.org"
                xmlns:sec = "http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
...
...

<div sec:authorize = "isAnonymous()">
    <a th:href = "@{/login}">Log in</a>
    <br>
    <a th:href = "@{/register}">Register</a>
</div>

<br>

<a th:href = "@{/recipeList}">List Page</a>

Даже после того, как я войду в систему, я все еще вижу теги «Войти» и «Регистрация».

And here's the configuration, if its useful :

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public DataSource dataSource;

    @Bean
    PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

    @Bean
    public JdbcUserDetailsManager jdbcUserDetailsManager() throws Exception{
        JdbcUserDetailsManager jdbcUserDetailsManager = new JdbcUserDetailsManager();
        jdbcUserDetailsManager.setDataSource(dataSource);
        return jdbcUserDetailsManager;
    }

    @Autowired
    public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception{
        auth.jdbcAuthentication().dataSource(dataSource).passwordEncoder(passwordEncoder());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                    .antMatchers("/", "/home").permitAll()
                    .antMatchers("/register").permitAll()
                    .antMatchers("/recipeList").permitAll()
                    .antMatchers("/foodDescription/**").permitAll()
                    .antMatchers("/addNew/**").hasAnyRole("ADMIN","USER")
                    .antMatchers("/delete/**").hasRole("ADMIN")
                    .antMatchers("/edit/**").hasRole("ADMIN")
                    .anyRequest().authenticated()
                    .and()
                .formLogin()
                    .defaultSuccessUrl("/")
                    .permitAll()
                    .and()
                .logout()
                    .logoutSuccessUrl("/").permitAll();
        http.csrf().disable();
    }
}

Я предполагаю, что Thymeleaf не знает, когда пользователь вошел в систему, и если из моего кода потребуется какой-либо другой класс, я его отредактирую. Застрял на этом навсегда теперь.

Ваш pom.xml завершен или вы пропустили некоторые его части перед публикацией?

Ahmet 31.01.2019 10:04

Я пропустил некоторые части этого

Tornike 31.01.2019 10:19

Не задавайте два вопроса в одном опубликованном вопросе. Разместите два отдельных вопроса. Вы уже проголосовали за «слишком широкий». Однако, если вы будете искать на SO, вы найдете много ответов на свою вторую проблему. Сначала попробуйте некоторые решения.

dur 31.01.2019 10:19

О, извините за это, я обновлю свой вопрос и удалю вторую часть :) @dur

Tornike 31.01.2019 10:42

Ваш класс User реализует org.springframework.security.core.userdetails.User? Я использую точно такой же код, как и ваш, во многих проектах с небольшими отличиями. Я использую formLogin().loginPage("/login") в качестве обработчика входа в систему; если у вас есть такая страница входа, установите ее и попробуйте

Ahmet 31.01.2019 12:13

Также обратите внимание на версии тимелеафа и весенней загрузки.

Ahmet 31.01.2019 12:15

@Ahmet Да, действительно, он реализует класс userdetails.User, может быть, если я использую пользовательскую страницу входа, она сработает, я попробую. Что касается версий thymeleaf и springboot, я думаю, что они хороши, потому что весь остальной код работает нормально:/

Tornike 31.01.2019 12:38

Тем не менее версии важны.

Ahmet 31.01.2019 12:47

@ Ахмет да, проблема была в версиях, ты был прав :) Спасибо

Tornike 31.01.2019 12:55
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
9
1 035
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что вы используете Spring Boot 2.1.x

Тогда вам нужно использовать версию 5:

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>

Это сработало, черт возьми, я даже не подумал о правильных версиях (я уже думал, что это правильная версия, которая у меня была). Большое спасибо :)

Tornike 31.01.2019 12:54

Добро пожаловать. Я знаю, потому что я сделал ту же ошибку :-)

Simon Martinelli 31.01.2019 13:18

Другие вопросы по теме