spring-security 相关问题

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

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

API 迁移到 Spring Boot 3 后 Spring Security 无法工作

软件版本 Spring Boot 和依赖项:3.2.2 弹簧芯:6.1.3 春季安全 6.2.1 码头服务器:11.0.20 语言:Java 17、Kotlin(Jetbrains Kotlin 和 Kotlin 测试库版本)...

回答 1 投票 0

定义无需用户身份验证即可访问的端点

我想在 Spring Security 中进行身份验证,但我希望网站上的每个人都可以使用一些请求(主页、登录和注册)。你能告诉我出了什么问题吗...

回答 1 投票 0

是否有可能仅使用 Spring Security 和 Data JPA 来实现加密的数据库支持的登录过程?

正如标题所述,我正在尝试实现一些东西,在这一点上,我什至不确定是否可以按照我想象的方式实现。我想要一个非常简单的、数据库支持的注册和登录过程......

回答 2 投票 0

Spring Security - 本地主机重定向你太多次

当我在 tomcat 上运行应用程序时,页面返回此错误: localhost 重定向了您太多次 登录页面必须是自定义的。 这是我的控制器类和方法: @RestController @

回答 1 投票 0

Spring 安全 404

当我运行我的应用程序时,遇到问题(404 未找到)。但如果没有 SpringConfig 和 SecurityInitializer 类,我的应用程序也可以正常工作。 这是安全配置 基本包; 导入org.springframework。

回答 1 投票 0

WebSecurityConfigurerAdapter 替代品

在较新版本的 Spring Security 中,WebSecurityConfigurerAdapter 类已被弃用并删除。什么可以代替它?我正在使用视频课程教授 Spring Security,在视频中...

回答 1 投票 0

@AuthenticationPrincipal 返回 null

我根据参考文档设置了我的 Spring Security 应用程序,经过几个小时的故障排除后,我继续将 null @AuthenticationPrincipal 传递到我的控制器中。

回答 4 投票 0

SpringBoot中抛出运行时异常会触发Access Denied异常

我的 springboot 应用程序(用于博客)正在使用 JWT 身份验证方法。当用户尝试通过存储库中不存在的 pageId 查找博客时,我试图抛出一个

回答 1 投票 0

使用 Spring Security 验证 Azure AD 访问令牌

使用 Azure AD 和 Spring security 从基于 jsession 的身份验证切换到基于令牌的身份验证的最简单方法是什么?该文档不清楚其他身份验证方法...

回答 2 投票 0

Vaadin 自定义登录页面自动注销

所以,我尝试了教程中的 Vaadin 登录组件 https://vaadin.com/docs/latest/security/enabling-security ,它的工作方式就像一个魅力。 现在我正在尝试自定义登录表单,但是当...

回答 1 投票 0

为什么我在使用 MockMvc 和 JUnit 时收到错误 403?

我有一个带有 Spring Security (3.2) 的 Spring MVC (3.2.5) 应用程序。 我用这个方法配置了我的 SecurityConfig.class : @覆盖 protected void configure(HttpSecurity http) 抛出异常...

回答 4 投票 0

如何解决 Spring SAML2 SLO 中的 POST 请求 405 错误

我正在尝试实现 Spring Security SAML2 SSO/SLO 并成功实现了 SSO,但是当我尝试遵循 Spring security 文档来实现 SLO 时,我得到了这个 405 Method Not allowed

回答 1 投票 0

如何使用 Spring Security 6.2.1 解决 Maven 依赖项 com.google.guava:guava:31.1-jre 中的 CVE-2023-2976 漏洞?

最近,我在向 pom.xml 添加依赖项时在 Maven 项目中遇到了一个漏洞。该漏洞报告为 CVE-2023-2976,严重级别为“高”,表示“...

回答 1 投票 0

Spring Cloud Gateway Mvc 频繁抛出 IO 异常,路由失败并出现 403 错误

我正在将zuul配置迁移到spring cloud gateway mvc中。我在 spring boot application.yml 中配置了以下内容 春天: 云: 网关: 管理控制台: 路线: - ID:拉比...

回答 1 投票 0

Spring Security 允许所有访问时不会调用拦截器

我正在使用 spirng boot 和 security 3.2.3。我注册了一个拦截器来以这种方式处理特定路径: @EnableWebMvc @配置 公共类 WebMvcConfiguration 实现 WebMvcConfigurer ...

回答 1 投票 0

Spring Security中authorizeRequests()的替代品是什么?

我有下面的代码,我想替换authorizeRequests,因为它已被弃用 `@Bean public SecurityFilterChain filterChain( HttpSecurity httpSecurity) 抛出异常{ http安全 =

回答 1 投票 0

基于Spring安全表达式的访问控制-引用bean

我试图通过在我的Web安全表达式中引用bean方法来在Spring安全中使用基于表达式的访问控制。例如我有这样的东西 @成分 公开课

回答 1 投票 0

如何更改标准 spring 逻辑以在我需要的登录页面上显示错误?

当我在 loadUserByUsername 方法中抛出自定义异常 (AccountNotActivatedException) 时,Spring 将其包装在 InternalAuthenticationServiceException 中。一般来说,几乎任何例外......

回答 1 投票 0

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