Spring Boot + Thymeleaf Безопасность не распознана - PullRequest
0 голосов
/ 22 сентября 2018

Я пытался использовать теги безопасности чабреца, но я не могу заставить их работать.Это мой класс безопасности:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private Environment env;

    @Autowired
    private UserSecurityService userSecurityService;

    private BCryptPasswordEncoder passwordEncoder() {
        return SecurityUtility.passwordEncoder();
    }

    private static final String[] PUBLIC_MATCHERS = { "/css/**", "/js/**", "/image/**", "/", "/myAccount" };

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().
                antMatchers(PUBLIC_MATCHERS).permitAll().anyRequest().authenticated();

        http.csrf().disable().cors().disable().formLogin().failureUrl("/login?error").defaultSuccessUrl("/")
                .loginPage("/login").permitAll().and().logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/?logout")
                .deleteCookies("remember-me").permitAll().and().rememberMe();

    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userSecurityService).passwordEncoder(passwordEncoder());
    }

}

Pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity4</artifactId>
        </dependency>
    </dependencies>

Index.html

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

            <ul class="navbar-nav navbar-right">
                    <li class="nav-item"><a class="nav-link" href="#">Shopping
                            Cart</a></li>
                    <li class="nav-item"><a sec:authorize="isAnonymous()"
                        class="nav-link" th:href="@{/login}">My Account</a></li>
                    <li class="nav-item"><a sec:authorize="isAuthenticated()"
                        class="nav-link" th:href="@{/myProfile}">My Account</a></li>
                    <li class="nav-item"><a class="nav-link"
                        sec:authorize="isAuthenticated()" href="@{/logout}">Logout</a></li>
                </ul>

Моя проблема в том, что оба элемента nav называются MyНа странице отображается учетная запись, и я думаю, что тег sec: authorize не распознается или что-то в этом роде, или я явно делаю что-то не так :( Нужно ли мне делать какие-либо другие конфигурации? Я использую весеннюю загрузку 2,Я пытался решить эту проблему по-разному: от изменения версии thymeleaf-extras-springsecurity4 до добавления компонента в контексте Spring, но он все еще не работает: (

1 Ответ

0 голосов
/ 17 марта 2019

При автоматической настройке весенней загрузки экземпляр SpringSecurityDialect не настраивается автоматически.Поэтому у вас возникла эта проблема.Попробуйте добавить компонент SpringSecurityDialect, как показано ниже, и я надеюсь, что он будет работать.

@Bean
public SpringSecurityDialect securityDialect() {
    return new SpringSecurityDialect();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...