spring-security 相关问题

Spring Security是Spring Framework的应用程序安全解决方案。 Spring安全性可用于保护URL和方法调用。它广泛用于保护独立的Web应用程序,portlet和越来越多的REST应用程序。

Spring Boot Oauth 基于登录授权

我正在使用oauth创建一个Spring boot应用程序,现在我可以登录github,但我想要一个基于角色的应用程序,所以有些路由只能由role_admin访问,而...

回答 1 投票 0

Spring Boot中管理员和用户的两个不同的登录页面

我需要带有多个登录页面供客户和管理员使用的 Spring Boot 应用程序。我写了两个authenticationManager,一个用于客户,另一个用于管理员。查看配置类: 客户安全配置类 @

回答 1 投票 0

Spring boot - 如何解密yaml文件中的环境变量?

上下文 我有 Spring Boot 应用程序。我向它传递这样的变量: ... 数据源: url: jdbc:postgresql://${DB_SERVER_AND_PORT}/my_db 用户名:${DB_USER}

回答 1 投票 0

Spring security antMatcher 不起作用

编辑: 我进一步深入研究了问题,结果发现即使使用单一配置问题仍然存在。如果我使用单一配置并保留 http.antMatcher("/api/test/**") 网址不安全...

回答 2 投票 0

Spring Security 返回 403 Forbidden

我尝试像这样在Java中定义我的SecurityFilterChain,对“/game/**”的GET请求,...没问题,但是当我尝试请求“/user/all”时,它返回403禁止。 ...

回答 1 投票 0

自定义 OAuth2 同意流程

我正在构建一个服务提供商应用程序,用户应该能够使用 OAuth2 和 OpenID Connect 与第三方应用程序共享数据。 标准 OAuth2 同意流程

回答 3 投票 0

Spring Boot REST 服务和 Shibboleth 之间的手动身份验证

我有一个用 Java Spring Boot 编写的无状态 REST 服务的后端。 1- 其中一项服务是“/Login”。它从我自己的网络表单(不是表单生成器)接收用户名和密码......

回答 1 投票 0

requestMatchers("").permitAll() 不起作用

我正在尝试使用 Spring Boot 安全性来实现控制器身份验证。 当自定义我的 filterChain 时,我收到 401 Unauthorized for resources I have特别允许的资源。 @豆 公开

回答 1 投票 0

Spring SessionRepositoryFilter 不适用于转发的请求

我正在使用 Hazelcast 来存储用户会话。请求通过 SessionRepositoryFilter,但如果出现错误,则请求将转发到 /error。转发的请求没有通过...

回答 2 投票 0

Spring Security 6.2 和 CAS 身份验证:CasAuthenticationFilter.CAS_STATEFUL_IDENTIFIER 发生了什么?

我正在使用 Spring Security 6.2 在我的应用程序上设置 CAS 身份验证。 文档(https://docs.spring.io/spring-security/reference/servlet/authentication/cas.html)指出: 过程...

回答 1 投票 0

permitAll() 无法在带有 Spring boot 的 Spring Security 6 中工作

我已经设置了一个带有 JWT 身份验证的自定义 SecurityFilterChain,为了进行测试,我允许测试路由上的所有请求。 即使禁用 httpBasic 和 formLogin 身份验证,我仍然

回答 1 投票 0

使用OAuth时如何针对不同类型实现Spring Security @PostFilter

我在我的项目中使用 Spring Boot、Spring Security Oauth 和 Spring Security,这是一个从其控制器方法返回 ResponseEntity<> 的 REST 服务器。 现在当我添加@PostFilter

回答 2 投票 0

跳过从 Spring Security Config 返回 ModelAndView 的 GET URL

我正在研究 Spring Boot security 3.2.1 并在我的项目中实现了 JWT 身份验证。但是,现在我无法获取之前工作的 HTML 页面。我已经添加了这些资源...

回答 1 投票 0

javax.net.ssl.SSLException:意外错误:java.security.InvalidAlgorithmParameterException

它是一个用于 LDAP 的 Java Web 应用程序,我正在实现 LDAPS,所以当添加自签名 cert ssl 证书时我面临这个问题。 keytool -genkeypair -keyalg RSA -keysize 2048 -alias localhost -

回答 1 投票 0

如何使用 Spring Security 模拟基于令牌的身份验证以进行单元测试 Spring Boot Rest 控制器?

我想对其余控制器进行单元测试,该控制器使用 Spring 安全框架通过 JWT 令牌进行身份验证。我无法找到模拟基于 JWT 令牌的身份验证来测试其余部分的方法

回答 1 投票 0

使用ReactiveSecurityContextHolder设置后Spring WebFlux安全上下文为空

我正在使用 Spring Boot 和 Spring Security 开发反应式应用程序,特别是处理 Kafka 消费者中的身份验证。尽管使用

回答 1 投票 0

Spring Security对经过身份验证的会话管理的澄清

我用一个不同的、更具体的疑问来跟进我之前的问题,考虑以下场景: 我目前正在使用 spring security 6 运行 Oauth2 资源服务器。客户端应用程序...

回答 1 投票 0

如何从Spring Security中的默认过滤器堆栈中删除一个过滤器?

我必须从 Spring Security 堆栈中排除一个默认过滤器。所以所有过滤器都应该照常工作。看来我找到了这样做的方法,制作自定义 FilterChainProxy: 公开课

回答 2 投票 0

Oauth2 创建名为“org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration”的 bean 时出错

我尝试使用spring做一个登录注册系统并使用Oauth2 这些都是错误 上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans。

回答 2 投票 0

Spring Security 的 Thymeleaf 授权不起作用[重复]

我在 Spring Boot 应用程序中使用 Spring Security,但 Thymeleaf 授权似乎无法正常工作。 我有 Thymeleaf 模板,代码如下: 我在 Spring Boot 应用程序中使用 Spring Security,但 Thymeleaf 授权似乎无法正常工作。 我有带有以下代码的 Thymeleaf 模板: <div class="container"> <div class="row" sec:authorize="isAuthenticated()"> <h2 style="color:green">User is Logged In</h2> <p sec:authentication="principal.username">username</p> </div> <div class="row" sec:authorize="!isAuthenticated()"> <h2 style="color:red">User is Logged Out</h2> </div> <div class="row" sec:authorize="hasRole('ROLE_SUPERUSER')"> <h2>This will only be displayed if authenticated user has role ROLE_SUPERUSER.</h2> </div> <div class="row" sec:authorize="hasRole('ROLE_ADMIN')"> <h2>This will only be displayed if authenticated user has role ROLE_ADMIN.</h2> </div> <div class="row" sec:authorize="hasRole('ROLE_USER')"> <h2>This will only be displayed if authenticated user has role ROLE_USER.</h2> </div> <div th:if="${#authorization.expression('hasRole(''ROLE_ADMIN'')')}"> This will only be displayed if authenticated user has role ROLE_ADMIN. </div> <div th:if="${#authorization.expr('hasRole(''ROLE_ADMIN'')')}"> This will only be displayed if authenticated user has role ROLE_ADMIN. </div> </div> 示例取自:https://github.com/thymeleaf/thymeleaf-extras-springsecurity 但是,显示的唯一内容是 sec:authorize="isAuthenticated()" 和 sec:authorize="!isAuthenticated()",并且无论用户的角色如何,授权始终被忽略。 我的百里香配置是: @Configuration public class ThymeleafConfig { @Bean public TemplateResolver defaultTemplateResolver() { TemplateResolver resolver = new TemplateResolver(); resolver.setResourceResolver(thymeleafResourceResolver()); resolver.setPrefix("classpath:/templates/"); resolver.setSuffix(".html"); resolver.setTemplateMode("HTML5"); resolver.setCharacterEncoding("UTF-8"); resolver.setCacheable(true); return resolver; } @Bean public SpringResourceResourceResolver thymeleafResourceResolver() { return new SpringResourceResourceResolver(); } @Bean public SpringTemplateEngine templateEngine(TemplateResolver templateResolver) { SpringTemplateEngine engine = new SpringTemplateEngine(); engine.setTemplateResolver(templateResolver); engine.addDialect(new SpringSecurityDialect()); engine.addDialect(new LayoutDialect()); return engine; } @Bean public ThymeleafViewResolver thymeleafViewResolver(SpringTemplateEngine templateEngine) { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setTemplateEngine(templateEngine); resolver.setCharacterEncoding("UTF-8"); resolver.setContentType("text/html"); resolver.setOrder(Ordered.LOWEST_PRECEDENCE - 5); return resolver; } } 我对 thymeleaf-extras-springsecurity4 使用以下依赖项: <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity4</artifactId> <version>2.1.3.RELEASE</version> </dependency> 版本 3.0.2.RELEASE 根本不起作用,并且 sec 命名空间总是被 Thymeleaf 忽略。 我的 Spring Boot 版本是 1.5.2.RELEASE。 可能是什么原因? 更新。 configure(HttpSecurity http)中的SecurityConfig方法如下所示: @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().ignoringAntMatchers("/h2-console").disable() .authorizeRequests() .antMatchers("/webjars/**", "/static/**", "/images/**", "/**/favicon.ico").permitAll() .antMatchers("/heat/**", "/power/**", "/water/**").permitAll() // start allowing h2-console .antMatchers("/h2-console/**").permitAll(); http.csrf().disable(); http.headers().frameOptions().disable() // end allowing h2-console .and().authorizeRequests().antMatchers("/info").permitAll() .and().authorizeRequests().antMatchers("/users/**").authenticated() .and().authorizeRequests().antMatchers("/users/**").hasAnyAuthority("ADMIN", "SUPERUSER") .and().formLogin() .loginPage("/login") .permitAll() .and() .logout() .permitAll() .deleteCookies("remove") .logoutUrl("/logout") .logoutSuccessUrl("/") .invalidateHttpSession(true) .and().exceptionHandling().accessDeniedPage("/access_denied"); } 并且来自 IndexController 的映射非常简单,它只是返回 login 模板: @RequestMapping("/login") public String loginForm() { return "login"; } 版本说明: 由于新的安全限制,以下内容在 Thymeleaf 3.1+ 中不起作用。 解决任务的另一种方法是使用此语法来检查角色: <div class="row" th:if="${#request.isUserInRole('SUPERUSER')}"> <h2>This will only be displayed if authenticated user has role ROLE_SUPERUSER.</h2> </div> 它不使用 sec 命名空间,实际上根本不需要 thymeleaf-extras-springsecurity4 依赖项来使用它。 经过多次尝试不同的配置,我找到了解决方法。在这种情况下,sec:authorize="hasAuthority('ADMIN')"属性起作用: <div class="row" sec:authorize="hasRole('ROLE_ADMIN')"> <div class="col-md-10 col-md-offset-2"> <h2>User Has Role Admin</h2> </div> </div> <div class="row" sec:authorize="hasAuthority('ADMIN')"> <div class="col-md-10 col-md-offset-2"> <h2>User Has Authority Admin</h2> </div> </div> 和 User Has Authority Admin 标题呈现在页面上。 仍然不知道为什么 sec:authorize="hasRole('ROLE_ADMIN')" 属性不起作用,因为 thymeleaf-extras-springsecurity GitHub 页面上建议将其作为示例: https://github.com/thymeleaf/thymeleaf-extras-springsecurity#using-the-attributes 希望这可以帮助某人,尽管问题仍然悬而未决。 要尝试的事情: 1) 用 @EnableWebMvc 注释您的配置。 2) 将 ROLE_ADMIN 替换为 ADMIN(其他也相应地)。 3)在您的控制器中,打印此内容以查看您当前的角色: Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Set<String> roles = authentication.getAuthorities().stream() .map(r -> r.getAuthority()).collect(Collectors.toSet()); System.out.println(roles); 如果这对您不起作用,也许可以尝试 getUserPrincipal() 中的 HttpServletRequest。 简短地说: 我包含了我的 MVC 配置,以便您可以尝试最新的 Thymeleaf 和 Spring Security 版本。那里有一些额外的配置,因此您可以删除与您的项目无关的内容。 @Configuration @EnableWebMvc public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configuration) { configuration.enable(); } @Bean public ThymeleafViewResolver viewResolver() { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setOrder(1); resolver.setCharacterEncoding(StandardCharsets.UTF_8.name()); resolver.setTemplateEngine(templateEngine()); return resolver; } @Bean public TemplateEngine templateEngine() { Set<ITemplateResolver> templateResolvers = new LinkedHashSet<>(1); templateResolvers.add(webTemplateResolver()); SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolvers(templateResolvers); Set<IDialect> dialects = new LinkedHashSet<>(2); dialects.add(new SpringSecurityDialect()); dialects.add(new Java8TimeDialect()); templateEngine.setAdditionalDialects(dialects); return templateEngine; } @Bean public ITemplateResolver webTemplateResolver() { SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); resolver.setPrefix("/WEB-INF/thymeleaf/"); resolver.setTemplateMode(TemplateMode.HTML); resolver.setCharacterEncoding(StandardCharsets.UTF_8.name()); resolver.setSuffix(".html"); resolver.setCacheable(false); resolver.setOrder(2); return resolver; } @Bean public ViewResolver tilesViewResolver() { UrlBasedViewResolver viewResolver = new UrlBasedViewResolver(); viewResolver.setViewClass(TilesView.class); viewResolver.setOrder(0); return viewResolver; } @Bean public TilesConfigurer tilesConfigurer() { TilesConfigurer configurer = new TilesConfigurer(); configurer.setDefinitions("/WEB-INF/**/views.xml"); return configurer; } @Bean public LocalValidatorFactoryBean validator() { return new LocalValidatorFactoryBean(); } @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/403"); registry.addViewController("/404"); registry.addViewController("/about"); //edited for brevity } @Bean public ReloadableResourceBundleMessageSource messageSource() { ReloadableResourceBundleMessageSource source = new ReloadableResourceBundleMessageSource(); source.setBasename("classpath:messages"); source.setDefaultEncoding(StandardCharsets.UTF_8.name()); return source; } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(localeChangeInterceptor()); registry.addInterceptor(themeChangeInterceptor()); registry.addInterceptor(deviceResolverHandlerInterceptor()); super.addInterceptors(registry); } @Bean public HandlerInterceptor localeChangeInterceptor() { LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor(); interceptor.setParamName("lang"); return interceptor; } @Bean public HandlerInterceptor themeChangeInterceptor() { ThemeChangeInterceptor interceptor = new ThemeChangeInterceptor(); interceptor.setParamName("theme"); return interceptor; } @Bean public ResourceBundleThemeSource themeSource() { ResourceBundleThemeSource themeSource = new ResourceBundleThemeSource(); themeSource.setBasenamePrefix("theme-"); return themeSource; } @Bean public PersistedThemeResolver themeResolver() { PersistedThemeResolver resolver = new PersistedThemeResolver(); resolver.setDefaultThemeName("default"); return resolver; } @Bean public HandlerInterceptor deviceResolverHandlerInterceptor() { return new DeviceResolverHandlerInterceptor(); } @Bean public CookieLocaleResolver localeResolver() { CookieLocaleResolver resolver = new CookieLocaleResolver(); resolver.setDefaultLocale(Locale.US); return resolver; } //removed custom bean declaration @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(new ServletWebArgumentResolverAdapter(new DeviceWebArgumentResolver())); super.addArgumentResolvers(argumentResolvers); } @Bean public Executor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(100); executor.initialize(); return executor; } } 工作 pom 摘录: <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf</artifactId> <version>3.0.2.RELEASE</version> <exclusions> <exclusion> <groupId>javassist</groupId> <artifactId>javassist</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring4</artifactId> <version>3.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity4</artifactId> <version>3.0.0.RELEASE</version> </dependency>

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.