当前位置: 首页 > 知识库问答 >
问题:

Spring Security Thymeleaf-如果未经身份验证,则向用户隐藏特定数据

方弘
2023-03-14

我认为百里叶不知道用户何时登录,我已经隐藏了两个

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>

下面是对经过身份验证的用户隐藏两个锚标记的代码:

<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>

即使登录后,我仍然看到“登录”和“注册”标签

下面是配置,如果有用的话:

@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不知道用户何时登录,如果我的代码需要任何其他类,我会编辑它。现在一直被困在这个问题上。


共有1个答案

东方乐
2023-03-14

我假设您使用的是Spring Boot 2.1.x

然后你必须使用版本5:

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>
 类似资料:
  • 如果未经验证,我想将用户重定向到我的索引页(即登录页) 似乎无法使它工作,我真的对路由感到困惑。 家庭控制器 路由 用户控制器 如您所见,路由将在索引功能处重定向到用户控制器,如下所示: *具有_construct(),因此它使用中间件“auth”。 处理程序。php 以及auth中间件(Exceptions/Handler.php)中未经验证的函数 我现在得到的错误如下: 发生此错误的原因是 返

  • 我的代码在这里:代码重新发布是因为我想问一个更直接的问题。如何在未经身份验证的用户和经过身份验证的用户之间切换?我的未经验证的文件似乎已缓存,我使用了以下方法: 在我剩下的api代码之前,它仍然不能工作。谢谢你的帮助 注意:我知道它不起作用,因为我在切换配置/凭据提供程序后立即使用lambda进行调用,并且只有授权用户才能调用此方法。 编辑@behrooziAWS答案: API代码: 完整错误:B

  • 我确实有一些独特的要求,我想隐藏要从特定角色用户中选择的角色。 例如,我有一个角色名称admin、部门1、部门2和部门3。作为管理员,我应该只能在门户中看到部门1、部门2和部门3的角色管理。 但如果我为管理员定义权限,他/她可以管理角色。管理员用户可以查看Liferay中可用OOTB的所有角色。 有人能帮我配置一下吗?

  • 于是我在这里看到:https://firebase . Google . com/docs/auth/web/account-linking # link-auth-provider-credentials-to-a-user-account现在可以在Firebase中链接用户账号了。我还看到Firebase提供了匿名认证的功能,它为一个用户创建一个用户会话,不需要任何凭证。 在我们的应用程序中,

  • 我的管理员控制器扩展了控制器类,在那里我使用方法加载视图页面并传递保护。config/auth.php也通过添加管理员保护和提供程序进行了修改。在app/Actions/Fortify文件夹中,我添加了AttemptToAuthenticate和ReDirectIfTwoFactorAuthenticate类,并更改了命名空间。我的管理员控制器还扩展了Guard。用户的重定向中间件和管理员的重定向

  • 问题内容: 编辑:忘记提及我与AngularJs在一起仅一周了,因此,如果您看到某些东西,您认为应该做得更好,并且与问题无关,请随时在评论部分告诉我。 好的,所以我有我的身份验证控制器和提供程序,由于它们与问题范围无关,因此将不显示。然后,我有一个拦截器来检查拨打电话时用户是否已通过身份验证。如果是这样,我将请求的标头设置为包括用户的Token(如果没有),则将用户重定向到登录页面,甚至不向服务器