Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Security ограничить доступ к разделу / 10 сообщений из 10, страница 1 из 1
23.05.2013, 13:30:14
    #38269973
MarMot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security ограничить доступ к разделу
Добрый день!

Конфигурация spring security:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:security="http://www.springframework.org/schema/security"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                           http://www.springframework.org/schema/security
                           http://www.springframework.org/schema/security/spring-security-3.1.xsd">

	<security:global-method-security
		secured-annotations="enabled" />

	<security:http auto-config="false" access-denied-page="/index.html">

		<security:intercept-url pattern="/PNG/**"
			access="ROLE_USER" />

		<security:intercept-url pattern="/upload/**"
			access="ROLE_ADMINISTRATOR" />
		<security:intercept-url pattern="/admin/**"
			access="ROLE_ADMINISTRATOR" />
		<security:intercept-url pattern="/personalaccount.html"
			access="ROLE_USER, ROLE_READER, ROLE_ADMINISTRATOR" />

		<security:form-login login-page="/login.html"
			authentication-success-handler-ref="authenticationSuccessHandler"
			authentication-failure-handler-ref="authenticationFailureHandler" />
		<security:logout logout-url="/logout"
			logout-success-url="/index.html" />
		<security:intercept-url pattern="/**"
			access="IS_AUTHENTICATED_ANONYMOUSLY" />
	</security:http>
	...
</beans>



Сейчас доступ к разделу /PNG/* есть только у ROLE_USER

Код: xml
1.
2.
<security:intercept-url pattern="/PNG/**"
			access="ROLE_USER" />



Надо ограничить доступ к этому разделу так, что бы в отдельном методе по текущему юзеру и ряду параметров возвращался true или false.
Как брать текущего юзера известно, но как подключить свой фильтр я не нашел.
Буду благодарен за любые наводки.

Спасибо.
...
Рейтинг: 0 / 0
23.05.2013, 16:04:35
    #38270362
Adva
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security ограничить доступ к разделу
...
Рейтинг: 0 / 0
23.05.2013, 18:02:44
    #38270608
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security ограничить доступ к разделу
1. Использовать классификацию не по имени, а Authority (public enum Authority implements GrantedAuthority {}), назначенный юзерам по критериям. Конфиг подправить:
Код: xml
1.
2.
3.
4.
5.
...
<security:http auto-config="false" use-expressions="true">
    ..
</security:http>
...

и использовать expressions:
Код: xml
1.
<security:intercept-url pattern="/PNG/**" access="hasRole('VSE_PETI', 'VSE_VASI')"/>


2. Раз уж ты все равно отдаешь содержимое "/PNG/**" после Spring Security, то можно отдавать контроллером:
Код: java
1.
2.
3.
4.
@RequestMapping(value = "/PNG/{fileName}", method = RequestMethod.GET)
public ModelAndView profile(@PathVariable String fileName, Authentication authentication) throws IOException {
    //получаем юзера из authentication, смотрим права и отдаем содержимое
}


3. Конфиг как в (1) и использовать @PreAuthorize("hasRole('VSE_PETI', 'VSE_VASI')") перед методом контроллера из (2).
...
Рейтинг: 0 / 0
23.05.2013, 18:39:03
    #38270687
MarMot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security ограничить доступ к разделу
IDVsbruck1. Использовать классификацию не по имени, а Authority (public enum Authority implements GrantedAuthority {}), назначенный юзерам по критериям. Конфиг подправить:
Код: xml
1.
2.
3.
4.
5.
...
<security:http auto-config="false" use-expressions="true">
    ..
</security:http>
...

и использовать expressions:
Код: xml
1.
<security:intercept-url pattern="/PNG/**" access="hasRole('VSE_PETI', 'VSE_VASI')"/>


2. Раз уж ты все равно отдаешь содержимое "/PNG/**" после Spring Security, то можно отдавать контроллером:
Код: java
1.
2.
3.
4.
@RequestMapping(value = "/PNG/{fileName}", method = RequestMethod.GET)
public ModelAndView profile(@PathVariable String fileName, Authentication authentication) throws IOException {
    //получаем юзера из authentication, смотрим права и отдаем содержимое
}


3. Конфиг как в (1) и использовать @PreAuthorize("hasRole('VSE_PETI', 'VSE_VASI')") перед методом контроллера из (2).

Спасбо, но тут не получится разделить пользователей по группам.
Например, если у пользователя есть определенный период пользования ресурсами в PNG, то надо в зависимости от данных в БД и текущей даты разрешить или запретить доступ.
...
Рейтинг: 0 / 0
23.05.2013, 19:05:05
    #38270728
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security ограничить доступ к разделу
Ну, тогда можно попробовать (2): главное - определить кто и решить, отдавать ли контент.
...
Рейтинг: 0 / 0
23.05.2013, 22:04:02
    #38270935
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security ограничить доступ к разделу
MarMotIDVsbruck1. Использовать классификацию не по имени, а Authority (public enum Authority implements GrantedAuthority {}), назначенный юзерам по критериям. Конфиг подправить:
Код: xml
1.
2.
3.
4.
5.
...
<security:http auto-config="false" use-expressions="true">
    ..
</security:http>
...

и использовать expressions:
Код: xml
1.
<security:intercept-url pattern="/PNG/**" access="hasRole('VSE_PETI', 'VSE_VASI')"/>


2. Раз уж ты все равно отдаешь содержимое "/PNG/**" после Spring Security, то можно отдавать контроллером:
Код: java
1.
2.
3.
4.
@RequestMapping(value = "/PNG/{fileName}", method = RequestMethod.GET)
public ModelAndView profile(@PathVariable String fileName, Authentication authentication) throws IOException {
    //получаем юзера из authentication, смотрим права и отдаем содержимое
}


3. Конфиг как в (1) и использовать @PreAuthorize("hasRole('VSE_PETI', 'VSE_VASI')") перед методом контроллера из (2).

Спасбо, но тут не получится разделить пользователей по группам.
Например, если у пользователя есть определенный период пользования ресурсами в PNG, то надо в зависимости от данных в БД и текущей даты разрешить или запретить доступ.

Тогда получается, что на каждого пользователя надо заводить профайл или хранить его в данных сессии и в фильтер чейн проверять авторизацию.

К сожалению я делал это вручную без спринга, но базовый подход вроде как должен работать и в спринге

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/security-filter-chain.html
...
Рейтинг: 0 / 0
24.05.2013, 00:11:19
    #38271063
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security ограничить доступ к разделу
К слову сказать здесь перцы на стоковерфло обсуждают что-то рядом

http://stackoverflow.com/questions/7470405/authenticationsuccesshandler-example-for-spring-security-3
нужно обернуть AuthenticationSuccessHandler и вставить свою логику походу

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public class Test implements AuthenticationSuccessHandler {
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
        Set<String> roles = AuthorityUtils.authorityListToSet(authentication.getAuthorities());
        if (roles.contains("ROLE_USER") {
            response.sendRedirect("/userpage");
        }
    }
}
...
Рейтинг: 0 / 0
24.05.2013, 00:14:14
    #38271064
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security ограничить доступ к разделу
Код: xml
1.
2.
		<security:intercept-url pattern="/**"
			access="IS_AUTHENTICATED_ANONYMOUSLY" />



Не забудьте, что все остальное залогиненный юзер не увидит надо добавить вроде как через запятую другие роли которые разрешены.
http://forum.springsource.org/showthread.php?116667-how-to-bypass-lt-intercept-url-pattern-quot-trusted-**-quot-access-quot-ROLE_USER-SCOPE_TRUST-quot
...
Рейтинг: 0 / 0
24.05.2013, 00:25:58
    #38271073
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security ограничить доступ к разделу
Sergunka
Код: xml
1.
2.
		<security:intercept-url pattern="/**"
			access="IS_AUTHENTICATED_ANONYMOUSLY" />



Не забудьте, что все остальное залогиненный юзер не увидит надо добавить вроде как через запятую другие роли которые разрешены.
http://forum.springsource.org/showthread.php?116667-how-to-bypass-lt-intercept-url-pattern-quot-trusted-**-quot-access-quot-ROLE_USER-SCOPE_TRUST-quot

Правильная ссылка

http://stackoverflow.com/questions/12035099/spring-security-intercept-url-roles
...
Рейтинг: 0 / 0
30.05.2013, 15:18:00
    #38280323
MarMot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security ограничить доступ к разделу
Спасибо всем, решил сделать лучше обычный Spring-овый interceptor, но столкнулся с некоторой проблемой

http://www.sql.ru/forum/1026275-a/spring-interceptor-404-pri-sozdanii-novogo-fayla
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Security ограничить доступ к разделу / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]