@PreAutorize("denyAll")
public class SuperController {
}
public class MyController extends SuperController {
@PreAuthorize("hasRole('SUPERHERO')")
@RequestMapping(value = URL_PREFIX + "Add.do", method = RequestMethod.GET)
public String doStuff(Model model) {
...
}
}
在全局方法安全标记中使用切入点表达式
<global-method-security pre-post-annotations="enabled">
<protect-pointcut expression="execution(* com.acme.*Controller.*(..))" access="denyAll" />
</global-method-security>
这种方法也失败了:控制器的方法没有注释仍然可以访问。
我在这里回答我自己的问题。
我通过使用HandlerInterceptorAdapter解决了这个问题。
我不确定这是实现结果的最典型的方法,但对我来说已经足够好了。
public class MvcPreAuthorizeAnnotationCheckerInterceptor extends HandlerInterceptorAdapter {
final HandlerMethod hm;
if (handler instanceof HandlerMethod) {
hm = (HandlerMethod) handler;
PreAuthorize annotation = hm.getMethodAnnotation(PreAuthorize.class);
if (annotation == null) {
// check if the class is annotated...
annotation = hm.getMethod().getDeclaringClass().getAnnotation(PreAuthorize.class);
if (annotation == null) {
// add logging
// or send a NON AUTHORIZED
response.sendRedirect(request.getContextPath());
}
}
return true;
}
}
<mvc:interceptors>
<beans:ref bean="mvcPreAuthorizeAnnotationCheckerInterceptor"/>
</mvc:interceptors>
<beans:bean id="mvcPreAuthorizeAnnotationCheckerInterceptor" class="com.acme.MvcPreAuthorizeAnnotationCheckerInterceptor"/>
大多数Web应用程序在使用户可以访问该功能之前验证功能级别访问权限。但是,如果未在服务器上执行相同的访问控制检查,则黑客无法在未经适当授权的情况下进入应用程序。 我们将通过以下每项来了解这个漏洞的威胁代理,攻击向量,安全弱点,技术影响和业务影响。 威胁代理 - 具有网络访问权限的任何人都可以向应用程序发送请求。 攻击者的方法 - 谁是授权系统用户,只需将URL或参数更改为特权函数即可。 安全弱点
问题内容: 为什么无法从另一个内部访问其他控制器方法呢? 像这样。 已编译 如果您不能这样做,那为什么不呢?我还应该怎么做… 问题答案: 最近几个小时遇到相同的问题。我使用了api / services文件夹。它可能不完全是您所需要的,但是它是一个选择。
我们已经使用Spring security来保护restendpoint。每个rest资源都使用@preauthorize注释进行注释。当调用方没有访问他为Spring security请求的资源的权限时,会抛出一个org.springFramework.security.access.AccessDeniedException异常。我们有一个异常映射器,它将这个带有适当错误代码403的消息返回给
我正在研究Dispatcher Servlet代码。在这里,我发现调度程序servlet使用HandlerMap来选择请求的处理程序。此外,Request estMappingHandlerMap用作HandlerMap的实现。现在,如果考虑的bean具有@Controller或@Request estMap注释,则isHandlerMethod of Request estMappingHand
我有一个简单的Spring Boot应用程序,它公开了一个RESTAPI。我已经使用@PreAuthorize(“hasRole('ROLE_4'))注释成功地配置了Spring Security性,以根据restapi中的角色保护每个方法。 我注意到,如果我根本不把@PreAuthorize注释,框架允许任何经过身份验证的用户进行此请求。我想扭转这种行为。因此,如果其中一个程序员忘记添加@Pre
我的控制器类如下: 我有以下资源服务器配置 最后,我的测试如下所示: 问题是我总是获得401 HTTP状态,并显示消息“unauthorized”,“error\u description”:“访问此资源需要完全身份验证”。 我应该如何为@PreAuthorated注释控制器方法方法编写测试?