Kle*_*ota 6 spring spring-security thymeleaf
在我目前的spring-boot项目中,我在我的视图中看到了一段代码:
<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>
Run Code Online (Sandbox Code Playgroud)
其中只应在同一时间显示其中一个片段1或2.但是现在,当我在浏览器中打开此视图时,正在显示这两个区域.
任何人都可以看到这里有什么问题?
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;
}
}
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 11
我的修复是添加thymeleaf-extras-springsecurity4到我的Web应用程序依赖项.
我有一个导入春季启动(1.4.1.RELEASE)的父pom,其中包括百万美元的额外内容,但是我的孩子pom(包含网络应用程序代码)需要调出特定的百日咳附加功能,如下所示:
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
</dependency>
瞧......它现在有用了.
我试图<div sec:authorize="hasRole('ROLE_USER')"></div>在百万美元模板(.html文件)中进行操作,仅在用户登录时显示div及其内容.但是,它一直显示div.
我希望它会抛出一个错误,说它在包含百万美元额外依赖之前无法识别弹簧安全标签......它会使调试变得更容易.
小智 -1
在您的配置中,您已将所有 URL 设置为具有匿名访问权限
.antMatchers("/b3/**", "/v1.1/**", "/**", "/destaque/**", "/categoria/**").permitAll()
Run Code Online (Sandbox Code Playgroud)
尝试这个
.antMatchers("/b3/**", "/v1.1/**", "/**", "/destaque/**", "/categoria/**")
.anyRequest().authenticated()
.and()
Run Code Online (Sandbox Code Playgroud)
由于permitAll(),所有的url都可以被匿名用户访问,也可以被认证用户访问,所以两者都会被显示。尝试使用 switch case 来避免此类陷阱。
| 归档时间: |
|
| 查看次数: |
9319 次 |
| 最近记录: |