- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Spring Boot 和 Spring Security 的新手,继承了一个使用它们的 webapp 项目。我们将把 webapp 迁移到新的部署环境。我们将要改变的事情之一是身份验证机制,以便它可以在新环境中运行。同时,我想使用一些现有的 PostMan 测试来测试 REST 端点,绕过安全性。基本上,我想暂时禁用安全性。
我有一个提供全局方法级安全性的类:
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
// ...
}
我有多个 Controller 类,例如,一个提供有关用户信息的类:
@RestController
public class UserController {
@ApiOperation(value = "Gets the list of users for an admin.")
@PreAuthorize("#oauth2.hasScope('dashboard') and #oauth2.hasScope('read') and hasRole('ROLE_SYSADMIN')")
@GetMapping(value = "/user/list", produces = MediaType.APPLICATION_JSON_VALUE)
@AuditAccess(message = "Accessing /user/list")
public ResponseEntity<List<UserResponse>> getUserList() {
// ...
}
// ...
}
如果我尝试运行我的 PostMan 测试,它们会失败,因为在我的本地测试环境中没有设置身份验证机制。我绕过安全性的第一次尝试是注释掉 @EnableGlobalMethodSecurity
行,但这导致了运行时错误,大概是由于方法上的 @PreAuthorize
注释。如果我也注释掉那些,我可以让测试运行。但是,有许多这样的注释分布在许多文件中。我宁愿不评论所有这些;我宁愿暂时替代方法安全性的“什么都不做”版本。这是我的尝试:
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
/**
* This class is designed to let everything pass the method filter, i.e.,
* effectively removing method level security.
*/
class DoNothingMethodSecurityExpressionHandler extends DefaultMethodSecurityExpressionHandler {
public Object filter(Object filterTarget, Expression filterExpression, EvaluationContext ctx) {
return filterTarget;
}
@Override
public void setReturnObject(Object returnObject, EvaluationContext ctx) {
// do nothing
}
}
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
MethodSecurityExpressionHandler doNothingHandler =
new DoNothingMethodSecurityExpressionHandler();
return doNothingHandler;
// TODO restore below
// return new OAuth2MethodSecurityExpressionHandler();
}
}
如果我尝试运行我的 PostMan 测试
GET http://localhost:8080/myapp/user/list
我得到一个错误:
2021-12-21 06:28:14,252 INFO [stdout] (default task-1) Request: http://localhost:8080/myapp/user/list }raised
2021-12-21 06:28:14,253 INFO [stdout] (default task-1) org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
2021-12-21 06:28:14,254 INFO [stdout] (default task-1) at org.springframework.security.access.intercept.AbstractSecurityInterceptor.credentialsNotFound(AbstractSecurityInterceptor.java:379) ~[spring-security-core-5.3.1.RELEASE.jar:5.3.1.RELEASE]
2021-12-21 06:28:14,254 INFO [stdout] (default task-1) at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:223) ~[spring-security-core-5.3.1.RELEASE.jar:5.3.1.RELEASE]
2021-12-21 06:28:14,254 INFO [stdout] (default task-1) at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:65) ~[spring-security-core-5.3.1.RELEASE.jar:5.3.1.RELEASE]
2021-12-21 06:28:14,255 INFO [stdout] (default task-1) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
2021-12-21 06:28:14,255 INFO [stdout] (default task-1) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
2021-12-21 06:28:14,256 INFO [stdout] (default task-1) at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
2021-12-21 06:28:14,257 INFO [stdout] (default task-1) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
2021-12-21 06:28:14,257 INFO [stdout] (default task-1) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
2021-12-21 06:28:14,257 INFO [stdout] (default task-1) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
2021-12-21 06:28:14,258 INFO [stdout] (default task-1) at mycompany.rest.controller.UserController$$EnhancerBySpringCGLIB$$f2b6b566.getUserList(<generated>) ~[classes:?]
2021-12-21 06:28:14,259 INFO [stdout] (default task-1) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_271]
2021-12-21 06:28:14,259 INFO [stdout] (default task-1) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_271]
2021-12-21 06:28:14,260 INFO [stdout] (default task-1) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_271]
2021-12-21 06:28:14,260 INFO [stdout] (default task-1) at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_271]
2021-12-21 06:28:14,260 INFO [stdout] (default task-1) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
2021-12-21 06:28:14,261 INFO [stdout] (default task-1) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
2021-12-21 06:28:14,261 INFO [stdout] (default task-1) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
2021-12-21 06:28:14,263 INFO [stdout] (default task-1) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
2021-12-21 06:28:14,264 INFO [stdout] (default task-1) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
2021-12-21 06:28:14,265 INFO [stdout] (default task-1) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
2021-12-21 06:28:14,265 INFO [stdout] (default task-1) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
2021-12-21 06:28:14,266 INFO [stdout] (default task-1) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
出于某种原因,我们仍在尝试进行身份验证。
此问题与其他一些问题(Spring Boot 2.0 Disable Default Security、Spring Oauth2 : Authentication Object was not found in the SecurityContext 和 An Authentication object was not found in the SecurityContext - Spring 3.2.2)类似,但涉及不同的版本和不同的用例。我一直无法弄清楚如何将这些答案应用于我的情况。我的 Spring 环境包括:
<spring.version>5.2.5.RELEASE</spring.version>
<spring.oath2.version>2.4.1.RELEASE</spring.oath2.version>
<spring.boot.version>2.2.6.RELEASE</spring.boot.version>
<spring.jwt.version>1.1.0.RELEASE</spring.jwt.version>
<spring.security.version>5.3.1.RELEASE</spring.security.version>
什么是绕过安全的简单方法?
最佳答案
而不是删除 @EnableGlobalMethodSecurity
,您可以保留它,但只是禁用它的 prePostEnabled
。
但它需要至少启用以下一项(详情请参阅 this):
@PreAuthorize
/@PreFilter
/@PostAuthorize
/@PostFilter
)@Secured
)@DenyAll
、@PermitAll
、@RolesAllowed
)MethodSecurityMetadataSource
由于您只在现有配置中启用 prePostEnabled
,我相信您现在不应在任何方法上使用任何 @Secured
和 JSR-250 注释。
所以下面的技巧应该只禁用@PreAuthorize
,同时保持其他东西保持不变:
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = false, securedEnabled = true, proxyTargetClass = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
}
或
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = false, jsr250Enabled = true, proxyTargetClass = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
}
关于spring - 在 SecurityContext 中找不到身份验证对象 - Spring 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70435817/
端点 Jersey . 我想用 ContainerRequestFilter 保护端点 @Provider @Secured public class AuthorizationRequestFilt
我看过很多关于这个的帖子,但我不明白我做错了什么。 服务.yml: parameters: services: bar.menu_builder: class: Foo\Bar
我对 Spring Integration 中的 SecurityContext 传播有一些困惑。 以下是文档的要点: http://docs.spring.io/spring-integration
我创建了一个自定义的 AuthenticationProvider,因此我必须返回一个包含用户的用户名和密码的 Authentication 实现(例如 UsernamePasswordAuthent
我正在尝试为 403(拒绝访问)和 500(内部服务器错误)等错误编写自定义错误页面。它们将从 Velocity 模板呈现,并使用用户的语言环境翻译所有消息。身份验证和语言环境解析在应用程序中运行良好
在我的 spring 应用程序中,我希望 SecurityContext 始终包含一个 Authentication。如果它不是常规的 UsernamePasswordAuthenticationTo
官方 Angular Security Guide谈到 4 个安全上下文:HTML、Url、Style 和 Resource Url。 每个人负责清理相应类型的资源。 此外,DomSanitizer
我在我的项目中使用 Spring Security。 我有更改登录的功能。为了实现这个目标,我使用以下代码 Authentication authentication = ... SecurityCo
我有一个 Quarkus 应用程序,我在其中实现了 ContainerRequestFilter 接口(interface)来保存来自传入请求的 header : @PreMatching publi
@Scheduled 注释方法是否在任何 SecurityContext 之外?当我尝试使用以下内容时,它始终将 securitycontext/auth 设为 null。如果这不可能,那么运行用户特
我正在使用 Spring Security 设置开发 Spring MVC 应用程序,该应用程序通过 LDAP 对 Active Directory 用户进行身份验证。我正在尝试设置 AOP 以记录调
我正在使用 securityContext 进行测试,但是当我将 runAsNonRoot 设置为 true 时我无法启动 pod。我使用 vagrant 以用户 abdelghani 的身份将一个
当我尝试在 symfony 演示中访问应用程序/示例时,出现以下错误 Error: The Symfony\Component\Security\Core\SecurityContext class
在我的k8s部署的securityContext.runAsUser部分中选择要运行的用户与在Dockerfile中使用USER myuser指定用户之间有什么区别? 我特别感兴趣是否存在与USER
我正在创建泽西网络服务。 Jersey 文档的一部分: Security information of a request is available by injecting a JAX-RS Sec
我正在为我的 Dropwizard + Liquibase + Angular 应用程序编写集成测试来测试 REST 服务。我的应用程序使用 cookie 进行基本身份验证。 所以我创建了 Class
我正在研究 Spring Security 的不同类实现。我知道我们将 Authentication 对象设置为 SecurityContext ThreadLocal 对象: UsernamePas
我是 Spring Boot 和 Spring Security 的新手,继承了一个使用它们的 webapp 项目。我们将把 webapp 迁移到新的部署环境。我们将要改变的事情之一是身份验证机制,以
我要问的问题有点棘手,我还没有找到任何答案。也许是因为我在寻找错误的东西。但我希望你能在这方面帮助我。 我用了following tutorial实现使用 token 而不是基本用户/密码身份验证的自
我想检查集群中的 Pod 是否作为特权 Pod 运行,这可能表明我们可能存在安全问题,因此我检查是否特权:true 但是根据securityContext:规范还有其他字段,例如 allowPrivi
我是一名优秀的程序员,十分优秀!