2013-06-28 4 views
0

Общее использование является:Spring безопасности - обеспечение запроса метод с hasPermission

<intercept-url pattern="/**" access"ROLE_ADMIN" /> 

Можно ли сделать что-то вроде:

<intercept-url pattern="/**" access"hasPermission("addSomething1") /> 

я не видел hasPermission среди выражения безопасности перечисленные ниже допустимой :

У нас есть только:

аутентификация; denyAll; hasAnyRole (список ролей); hasIpAddress; isAnonymous() и т. д.

Я просто догадываюсь, если разрешено использование метода hasPermission для защиты метода, то это также должно быть также для веб-запросов.

Thanks,

ответ

5

Yap, возможно. Вам просто нужно, чтобы перейти к экспрессии на основе оценки

 <security:http use-expressions="true"> 

и обеспечивают PermissionEvaluator обработчик выражения:

<security:expression-hanlder ref="webSecurityExpressionHandler" /> 

<bean id="webSecurityExpressionHandler" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler> 
    <property name="permissionEvaluator" ref="aclPermissionEvaluator" /> 
</bean> 

Конечно, вы должны иметь PermissionEvaluator реализацию. Вы можете написать свой собственный или можете использовать проект spring-acl.

+0

См. Мой ответ на этот вопрос http://stackoverflow.com/questions/8321696/creating-new-roles-and-permissions-dynamically-in-spring-security-3 описывает, как расширить выражение выражения безопасности веб-безопасности с дополнительными выражениями. – Ralph

+0

@Aubergine: Я просто хотел показать, где искать методы. Sp OP надеемся лучше понять фон. – Ralph

2

Павел Горец уже было описано, как включить выражения в перехватывают-URL-адрес тега (КСТАТИ После позволили ему все атрибуты доступа должны были записаны как выражение SPEL.!)

Но есть одна вещь, которую вы должны знать: выражения, доступные для тега intercept-url, отличаются от тех, которые доступны для выражений SpEl на основе методов (например, @PreAuthorize). Это связано с тем, что первые реализованы в WebSecurityExpressoonRoot, а остальные реализованы в MethodSecurityExpressionRoot.

См. Мой ответ на этот вопрос stackoverflow.com/questions/8321696/... в нем описывается, как расширить выражение выражения безопасности веб-безопасности с помощью дополнительных выражений.

+0

upvoted, я думаю, что это хорошее замечание. – Aubergine