#java #spring #spring-mvc #spring-security #spring-el
#java #spring #spring-mvc #spring-безопасность #spring-el
Вопрос:
Я работаю с Restful API (со многими URL-адресами), используя Spring 3.1.2, и хочу применять фильтры безопасности для каждого запроса, который использует как данные от аутентифицированного пользователя «принципала», так и данные, отправленные запросом.
пример:
проверка идентификатора учетной записи по URL-адресу запроса:
http://www.foo.com/accountRecords?accountId=23
с основными данными principal.accountId = 23
.
Я знаю, что это можно сделать из методов @RequestMapping, но хочу сделать это вне фактического метода, чтобы он был поддерживаемым и настраиваемым без вмешательства в бизнес-логику.
Но я не нашел никаких советов примеров по этому поводу..
Я считаю, что это должно выглядеть примерно так: @PreAuthorize("principal.accountId == requestParam.accountId")
Ответ №1:
Я думаю, вы ищете фильтры для фильтрации запроса и ответа. Для этой цели можно использовать Spring interceptors
.
public class MyInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession(false);
String requestParam = request.getParameter("your request param");
}
}
Наконец, вам необходимо настроить эти перехватчики в вашем context.xml файл:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.example.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
Комментарии:
1. Спасибо, я считаю, что перехватчики слишком высокого уровня для меня, в документации Spring перехватчики фильтруются по регулярному выражению и разрешениям, но не имеют доступа к параметрам запроса. Если бы вы могли предоставить пример кода, я был бы признателен.
2. посмотрите на отредактированный ответ, например. Смотрите, вы можете использовать параметры запроса.
3. Я понимаю. хороший пример 🙂 Знаете ли вы, как я могу получить доступ к участнику безопасности (например, имя пользователя и учетная запись) из MyInterceptor?