2 回答
TA贡献1725条经验 获得超7个赞
您可以通过配置来配置每个 URL 的安全性 HttpSecurity:
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//Ignore other configuration stuff for simplicity
http.authorizeRequests()
.antMatchers("/sign-up" ,"/verify/**" ).permitAll()
.anyRequest().authenticated()
}
}
然后对 URL 的所有请求除外/sign-up并且/verify/**需要身份验证(在您的情况下这意味着 JWT)。
如果你想进一步控制,你甚至可以执行以下操作/sign-up,并且/verify/**只能在没有身份验证的情况下访问正确的 HTTP 方法:
http.authorizeRequests()
.antMatchers(HttpMethod.POST, "/sign-up").permitAll()
.antMatchers(HttpMethod.GET, "/verify/**").permitAll()
.anyRequest().authenticated()
TA贡献1799条经验 获得超8个赞
您可以使用以下配置实现您的要求。这是使用不需要身份验证/授权的 URL 的好方法WebSecurity using ignoring instead of HttpSecurity as WebScurity will bypass the Spring Security Filter Chain and reduce the execution time
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/sign-up")
.antMatchers("/verify/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/set-password/").hasRole("yourROLE")
.antMatchers("/set-profile").hasRole("yourROLE")
.anyRequest().authenticated();
}
当您使用HttpSecurity并尝试permitAll()请求时。您的请求将被允许从 Spring Security 过滤器链访问。这是昂贵的,因为会有其他请求也将进入此过滤器链,需要根据身份验证/授权允许或不允许
但是当你使用时WebSecurity,任何请求都sign-up or verify将完全绕过 Spring Security Filter Chain。这是安全的,因为您不需要任何身份验证/授权就可以查看图像或读取 javascript 文件。
添加回答
举报