gpt4 book ai didi

spring security 主体 null/用户未登录 PermitAll 路径

转载 作者:行者123 更新时间:2023-12-02 09:31:45 26 4
gpt4 key购买 nike

我有 spring-security 来保护我的应用程序中的某些路径,并让其他路径开放以供匿名访问。我遇到的问题与我将访问权限保留为“permitAll”的开放部分有关。我只想保护某些路径不被非管理员访问,但我确实希望管理员用户在路径的开放部分时能够被识别。

Thymeleaf 模板(部分):

<p>Hello Spring Boot User <span th:text="${username}"/>!</p>
<div sec:authorize="isAnonymous()">isAnonymous</div>
<div sec:authorize="isRememberMe()">isRememberMe</div>
<div sec:authorize="isAuthenticated()">isAuthenticated</div>
<div sec:authorize="isFullyAuthenticated()">isFullyAuthenticated</div>

注意:该模型将用户名定义为:

String username = (principal != null ? principal.getName() : "ANONYMOUS");

配置(基于 Java)- 使用多种类型的身份验证

@Configuration
public static class FormLoginConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/form/**").authorizeRequests().anyRequest().authenticated()
.and().formLogin().permitAll().loginPage("/form/login").loginProcessingUrl("/form/login")
.and().logout().logoutUrl("/form/logout").invalidateHttpSession(true).logoutSuccessUrl("/");
}
}

@Order(45) // LOW
@Configuration
public static class BasicAuthConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/basic/**").authorizeRequests().anyRequest().authenticated()
.and().httpBasic();
}
}

/open 路径没有安全配置。只是一个 Controller 。/form 路径还有一个 Controller 。这些都是这样的(只是目前路径有所不同):

@Controller
@RequestMapping("/open")
public class OpenController extends BaseController {
@RequestMapping({"", "/"})
public String home(HttpServletRequest req, Principal principal, Model model) {
commonModelPopulate(req, principal, model);
return "home"; // name of the template
}
}

如果我转到这条路径/open(不 protected ),我会看到:

Hello Spring Boot User ANONYMOUS!

但是如果我转到此路径 /form (表单登录 protected - 登录后)我会看到:

Hello Spring Boot User admin! 
isAuthenticated
isFullyAuthenticated

所以我认为这里可能存在多个问题。第一个是 thymeleaf sec:authorize 属性没有执行任何操作,第二个是如果我位于 protected 路径下,我似乎只能访问主体和其他安全信息。

有没有一种方法可以只保护一个路径(和子路径),但允许在我的应用程序中的其他任何地方访问主体和安全数据?

最佳答案

您的“/open”资源未映射到任何安全过滤器。在我看来,您需要一个默认的 WebSecurityConfigurer (具有默认路径模式“/**”)并标记为 permitAll()。它应该比其他的有更高的 @Order,这样它就可以作为后备。

@Order(67) // LOWEST
@Configuration
public static class NoAuthConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/**").authorizeRequests().anyRequest().permitAll();
}
}

关于spring security 主体 null/用户未登录 PermitAll 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24767091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com