如何在不进行身份验证的情况下保护某些URLS



我有一个基于Spring Boot的应用程序。我希望URL/camunda/app/welcome/default/#!/login可以在没有任何身份验证的情况下访问,而URL

  • CCD_ 2
  • CCD_ 3
  • /camunda/app/tasklist/**
  • /camunda/app/admin/**

必须是安全的(即只有经过身份验证的用户才能访问它们(。

为了实现这一点,我编写了以下配置:

@Configuration
@EnableWebSecurity
public class MyConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.requestMatchers()
.and()
.authorizeRequests()
.antMatchers("/camunda/app/welcome/default/#!/login").permitAll()
.antMatchers("/camunda/app/welcome/default/#!/welcome",
"/camunda/app/welcome/default/#!/dashboard",
"/camunda/app/tasklist/**",
"/camunda/app/admin/**", 
"/oauth2/authorization/**",
"/oauth2/code/myredirecturl")
.authenticated()
.and()
.oauth2Login(...)
.logout()
.logoutRequestMatcher(...)
.logoutSuccessHandler(...);
}
}

但是,使用此配置,未经身份验证的用户可以访问应该受到保护的URL(/camunda/app/welcome/default/#!/welcome/camunda/app/welcome/default/#!/dashboard/camunda/app/tasklist/**/camunda/app/admin/**(。

我的配置有什么问题,我该如何修复?

很遗憾,但这不会起作用,因为实际上只有一个url:

/camunda/app/welcome/default/

"#"符号后的部分称为"锚点":

#/欢迎#/仪表板

锚不在后端处理,因为它们指向客户端加载的html文档中的某个位置。

https://www.w3docs.com/snippets/html/how-to-create-an-anchor-link-to-jump-to-a-specific-part-of-a-page.html

所以你不能只通过Spring来解决它,必须有一些前端逻辑。

还有这两个面具:

/camunda/app/tasklist/,以及/camunda/app/admin/

可能被Spring Boot覆盖,因为指向不同的url,而不是锚点。

在调用端点时,请确保使用#的URL编码,即%23。否则,将不考虑#之后的字符。

在没有适当编码的情况下向/camunda/app/welcome/default/#!/welcome发出请求将被解释为对/camunda/app/welcome/default/的请求。由于该端点不需要身份验证,因此任何人都可以访问它

由于除/camunda/app/welcome/default/#!/login之外的所有端点都需要身份验证,因此您可以精简HttpSecurity配置。我将在下面使用lambda样式的配置重写它,使其更可读:

http
// no need to add requestMatchers since you aren't changing the default configuration
.authorizeRequests(authz -> authz
.antMatchers("/camunda/app/welcome/default/#!/login").permitAll()
.anyRequest().authenticated() // any request that does not match the above rule ^ will require an authenticated user
)
.oauth2Login(...)
.logout(...)

相关内容

最新更新