[英]Passing a password for methods for Spring MVC Controller - AOP or Spring Security?
[英]Spring MVC custom authorization/security for controller methods
尋找創建自定義實現以授權請求。
我正在評估選項,以避免在控制器的每個方法上使用注釋。 相反,我正在探索通過過濾器將該功能集中化的可能性,該過濾器檢查登錄用戶是否具有所需的URL許可權
我們正在使用Spring 3.2.5.RELEASE
我打算創建一個數據庫表,該表在許可權和相關URL之間建立映射。
我正在尋找一種獲取當前URL的請求映射信息的方法。
例如:在我的數據庫中,我有:
URL=/view/{id} , permission=VIEW_USER
如果當前URL是:
/app/user/view/1
,用注釋的方法
@RequestMapping(value = "/view/{id}", method = RequestMethod.GET)
將被調用。 但是在發生這種情況之前,我需要驗證登錄用戶是否具有查看用戶詳細信息的權限。
在我的過濾器中,我可以獲取當前URL( /app/user/view/1
),如何獲取相應的映射( /view/{id}
)? 是否存在將URL與其對應的MVC請求映射相匹配的機制?
我看過/正在看SO上的相關文章,也看過Spring代碼,但還沒有找到方法。
如果您想這樣做,可以注冊MVC攔截器而不是servlet過濾器。 創建一個擴展HandlerInterceptorAdapter
的類,並在preHandle方法中可以訪問控制器的方法及其注釋。 攔截器的prehandle方法可能如下所示:
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod) {
HandlerMethod method = (HandlerMethod) handler;
if (method.getMethod().isAnnotationPresent(RequestMapping.class)) {
RequestMapping rqm = method.getMethodAnnotation(RequestMapping.class);
String[] urlMappings = rqm.value();
//do security logic
}
}
...
}
然后,您需要注冊攔截器。 如果您使用xml config,它是這樣完成的:
<mvc:interceptors>
<bean class="com.example.MySecurityInterceptor" />
...
</mvc:interceptors>
請注意,您的方法將很困難,您將需要處理spring支持的所有請求映射案例。 例如,在類級別上注釋的@RequestMapping
。 或在控制器的父類上注釋的@RequestMapping
等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.