Я думаю, 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 не знает, когда пользователь вошел в систему, и если из моего кода потребуется какой-либо другой класс, я его отредактирую. Застрял на этом навсегда теперь.
Я пропустил некоторые части этого
Не задавайте два вопроса в одном опубликованном вопросе. Разместите два отдельных вопроса. Вы уже проголосовали за «слишком широкий». Однако, если вы будете искать на SO, вы найдете много ответов на свою вторую проблему. Сначала попробуйте некоторые решения.
О, извините за это, я обновлю свой вопрос и удалю вторую часть :) @dur
Ваш класс User реализует org.springframework.security.core.userdetails.User? Я использую точно такой же код, как и ваш, во многих проектах с небольшими отличиями. Я использую formLogin().loginPage("/login") в качестве обработчика входа в систему; если у вас есть такая страница входа, установите ее и попробуйте
Также обратите внимание на версии тимелеафа и весенней загрузки.
@Ahmet Да, действительно, он реализует класс userdetails.User, может быть, если я использую пользовательскую страницу входа, она сработает, я попробую. Что касается версий thymeleaf и springboot, я думаю, что они хороши, потому что весь остальной код работает нормально:/
Тем не менее версии важны.
@ Ахмет да, проблема была в версиях, ты был прав :) Спасибо




Я предполагаю, что вы используете Spring Boot 2.1.x
Тогда вам нужно использовать версию 5:
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>
Это сработало, черт возьми, я даже не подумал о правильных версиях (я уже думал, что это правильная версия, которая у меня была). Большое спасибо :)
Добро пожаловать. Я знаю, потому что я сделал ту же ошибку :-)
Ваш
pom.xmlзавершен или вы пропустили некоторые его части перед публикацией?