如何在 Spring 启动中配置 SpringSecurityDialect 以获得 sec:authorize 工作



sec:authorize似乎不起作用!

当我启动应用程序时,尽管在这里和那里进行了调整,但Log OutLogin都没有显示......

以下代码在我的 html 文件中没有显示任何内容:

<li class="nav-item"
sec:authorize="isAuthenticated()">
<form th:action="@{/logout}"
method="post"
name="logoutForm">
</form>
<a class="nav-link"
href="#"
onclick="document.logoutForm.submit()">
<i class="fas fa-sign-out-alt"></i>Log Out</a>
</li>
<li class="nav-item"
sec:authorize="isAnonymous()">
<form th:action="@{/login}"
method="post"
name="loginForm">
</form>
<a class="nav-link"
href="#"
onclick="document.loginForm.submit()">
<i class="fas fa-sign-out-alt"></i>Log In</a>
</li>

下面是我的build.gradle文件:

plugins {
id 'org.springframework.boot' version '2.2.6.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
group = 'org.launchcode'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '14'
configurations {
developmentOnly
runtimeClasspath {
extendsFrom developmentOnly
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:2.2.7.RELEASE'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.security:spring-security-crypto'
implementation 'org.springframework.data:spring-data-commons:2.2.6.RELEASE'
implementation 'org.springframework.security:spring-security-core:5.1.4.RELEASE'
implementation 'org.springframework.security:spring-security-web:5.3.2.RELEASE'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.0.4.RELEASE'
implementation 'mysql:mysql-connector-java'
implementation 'org.thymeleaf:thymeleaf-spring5:3.0.11.RELEASE'
implementation 'org.webjars:bootstrap:4.4.1-1'
implementation 'com.googlecode.json-simple:json-simple:1.1.1'
implementation 'com.fasterxml.jackson.core:jackson-core:2.11.0'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
test {
useJUnitPlatform()
}

下面是我的配置类,其中包含注册 SpringSecurityDialect @Bean

@Configuration
public class WebApplicationConfig implements WebMvcConfigurer {
// Create spring-managed object to allow the app to access our filter
@Bean
public AuthenticationFilter authenticationFilter() {
return new AuthenticationFilter();
}
// Register the filter with the Spring container
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authenticationFilter());
}
@Bean
public SpringSecurityDialect springSecurityDialect() {
return new SpringSecurityDialect();
}
}

我想我遵循了这里的建议 https://github.com/thymeleaf/thymeleaf-extras-springsecurity/tree/3.0-dev

但我不知道为什么它仍然不起作用。 任何帮助表示赞赏。

我只是想说我以不同的方式处理了这个问题(我无法弄清楚SpringSecurityDialect的设置(,所以我做了如下:

<li th:if="${isLoggedIn != null}"
class="nav-item">
<form th:action="@{/logout}"
method="post"
name="logoutForm">
</form>
<a class="nav-link"
href="#"
onclick="document.logoutForm.submit()">
<i class="fas fa-sign-out-alt"></i>
Log Out</a>
</li>
<li th:if="${isLoggedIn == null}"
class="nav-item">
<a class="nav-link"
th:href="@{/login}">
<i class="fas fa-sign-in-alt"></i>
Log In</a>
</li>

哪个工作正常。也许将来我会再次尝试学习如何使用Spring Security方言。问候

最新更新