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

sec:在thymeleaf视图中为isAuthenticated()和isAnonymous()都返回true的authorize

艾照
2023-03-14
<div class="account">
    <ul>
        <li id="your-account" sec:authorize="isAnonymous()">
            ... code 1 ...
        </li>
        <li id="your-account" sec:authorize="isAuthenticated()">
            ... code 2 ...
        </li>
        <li th:if="${cart}">
            ...
        </li>
    </ul>
</div>

谁都能看出这里出了什么问题?

ps.:我的thymeleaf配置类是这样的:

@Configuration
public class Thymeleaf {

  @Bean
  public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine engine  =  new SpringTemplateEngine();

    final Set<IDialect> dialects = new HashSet<IDialect>();
    dialects.add( new SpringSecurityDialect() );
    engine.setDialects( dialects );

    return engine;
  }

}

ps.:我的spring-security配置类是:

@Configuration
@ComponentScan(value="com.spring.loja")
@EnableGlobalMethodSecurity(prePostEnabled=true)
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
        @Autowired
        private UserDetailsService userDetailsService;

        @Autowired
        private SocialUserDetailsService socialUserDetailsService;

        @Autowired
        private PasswordEncoder passwordEncoder;

        @Autowired
      private AuthenticationManagerBuilder auth;

        @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf()
                .disable()
            .authorizeRequests()
                .antMatchers("/b3/**", "/v1.1/**", "/**", "/destaque/**", "/categoria/**").permitAll()
                .anyRequest().authenticated()
                    .and()
                .formLogin()
                    .loginPage("/signin")
                    .loginProcessingUrl("/login").permitAll()
                    .usernameParameter("login")
                    .passwordParameter("senha")
                    .and()
                .logout()
                    .logoutUrl("/logout")
                    .logoutSuccessUrl("/")
                    .and()
                .apply(new SpringSocialConfigurer());
    }

        @Override
        public void configure(WebSecurity web) throws Exception {
            DefaultWebSecurityExpressionHandler handler = new DefaultWebSecurityExpressionHandler();
        handler.setPermissionEvaluator(new CustomPermissionEvaluator());
        web.expressionHandler(handler);
    }

        @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .userDetailsService(userDetailsService)
            .passwordEncoder(passwordEncoder);
    }

        @Bean
        @Override
        public AuthenticationManager authenticationManagerBean() throws Exception {
            return auth.getOrBuild();
        }
}

共有1个答案

柏修洁
2023-03-14

我的修复方法是将thymeleaf-extras-springsecurity4添加到我的web应用程序依赖项中。

我有一个父pom正在导入spring boot(1.4.1.release),其中包括thymeleaf extras,但我的子pom(包含web应用程序代码)需要调用特定的thymeleaf extras依赖项,如下所示:

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

瞧...现在起作用了。

我想做的是:

<div sec:authorize="hasRole('ROLE_USER')"></div>

在Tymeleaf模板(.html文件)中仅显示用户登录时div及其内容。然而,它一直在显示div。

我希望在包含thymeleaf extras依赖项之前,它会抛出一个错误,说它无法识别Spring Security标记...这会使调试变得容易得多。

 类似资料:
  • 问题内容: 在我当前的spring-boot项目中,我在thymeleaf视图中有如下代码片段: 其中只能同时显示摘要1或2之一。但是现在,当我在浏览器中打开此视图时,将显示两个区域。 有人看到这里有什么问题吗? ps .:我的thymeleaf配置类是这样的: ps .:我的spring-security配置类是: 问题答案: 我的解决方法是添加到我的Web应用程序依赖项。 我有一个父pom正在

  • 好的, 我试图使一个简单的mvcSpring启动应用程序,我有它在我的代码返回index.html当控制器接收到"/"的请求。 我不确定,但这不起作用。 SpringDataWebApplication。JAVA HealthCHeckController。JAVA 用户存储库。JAVA 指数html 指数html位于/templates目录中,如thymeleaf所示 pom.xml 用户实体。

  • 我正面临以下使用胸腺嘧啶的行为。我需要返回一个带有锚标记的视图,即。 但它返回一个“错误解析模板”问题。有人能帮我吗?如果我的想法是对的?提前道谢。

  • 问题内容: 如果我这样做: 那又回来了。仅仅是因为在列表中。 但是,如果我这样做: 那又回来了。而等于: 为什么? 问题答案: 运算符优先级 2.x,3.x。的优先级低于的优先级。因此,它等效于: 这就是你想要的: 正如@Ben指出的那样:建议从不写作,更喜欢。前者使它看起来像一个函数调用,而它却是一个运算符,而不是一个函数。

  • 我正在学习android开发者关于高效显示位图的教程,我正在尝试阅读位图的尺寸和类型。 谢谢!

  • 问题内容: 我正在尝试用写入文件后删除文件。这是我用来编写的代码: 我刷新并关闭了流,但是当我尝试删除时,返回。 我删除前检查,看看是否该文件存在,并且:,,一切回归真实。在调用这些方法之后,我尝试返回。 我做错了什么吗? 问题答案: 起作用的把戏很奇怪。事情是,当我以前读取文件的内容时,我使用。阅读后,我关闭了缓冲区。 同时,我切换了语言,现在我正在使用读取内容。同样在完成阅读后,我关闭了流。现