Вопрос по spring, spring-security, spring-roo – Spring-security не может соответствовать формату??

7

Я использую Spring-Security для защиты своего Интернета, когда я изучаю его с помощью файла конфигурации, сгенерированного Spring-Roo в applicationContext-security.xml, в<http> узел:

<code> <intercept-url pattern="/userses?form" access="hasRole('ROLE_ADMIN')" />
</code>

Это означает, что когда вы хотите создать объект «Пользователи», сначала вам необходимо войти в систему, чтобы получить разрешение ADMIN. Но на самом деле это не сработало. Проверьте журнал:

<code>2012-05-06 11:39:11,250 [http-8088-7] DEBUG org.springframework.security.web.util.AntPathRequestMatcher - Checking match of request : '/userses'; against '/userses?form'
</code>

Платформа использует для сравнения форму / userses вместо / userses ?, процесс аутентификации пропускается, так как строка не совпадает. Чтобы проверить это, я также попробую другой URL:

<code><intercept-url pattern="/userses/abc" access="hasRole('ROLE_ADMIN')" />
</code>

Я запросил / userses / abc, он обнаружил, что пользователь не авторизован, и перешел на страницу / login, проверил журнал:

<code>2012-05-06 11:46:44,343 [http-8088-7] DEBUG org.springframework.security.web.util.AntPathRequestMatcher - Checking match of request : '/uesrses/abc'; against '/userses/abc'
</code>

Поэтому мой вопрос таков: «Не поддерживает ли пружинная защита 3» параметр? Quot; шаблон или я пропустил что-то для конфигурации, чтобы поддержать это? PS: весь код генерируется roo без изменений, также интересно, почему он не работает.

Ваш Ответ

2   ответа
6

весенняя безопасность использует сопоставление стилей муравья, которое не может соответствовать параметрам. Соответствие регулярному выражению, однако,can соответствие по параметрам

Попробуйте определить это так:

<http request-matcher="regex">
  <security:intercept-url pattern="\A/userses\?form.*\Z" access="hasRole('ROLE_ADMIN')" />
</http>

Не знаю, почему Roo не делает этого автоматически. Похоже, так и должно быть.

@JerryCai Возможно, вам стоит открыть новый вопрос. Трудно читать код в комментариях, и это поможет другим с той же проблемой, если они смогут найти его в качестве отдельного вопроса по SO.
6

& Quot; запрос-согласовань & Quot; в использовании. Как указано в документации, значением по умолчанию является «ant», что указывает на использованиеAntPathRequestMatcherи альтернативой является "регулярное выражение",RegexRequestMatcher, Javadocs (связанный) дает подробные сведения о средствах сопоставления, включая тот факт, что первое сопоставляется с запросом «servletPath + pathInfo», а второе - с его «servletPath + pathInfo + queryString».

Похожие вопросы