Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 06.03.2015
Сообщений: 39

Spring Security, как обеспечить доступ к персональным страницам только их владельцу

25.09.2015, 01:41. Показов 4178. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть пользователь пользователь может владеть несколькими заведениями, а может не владеть ни одним. Вопрос в том как настроить intercept-url в security конфигах так что бы при переходе на страницу заведения только владелец имел права на редактирование и удаление, в то время как другие пользователи могли только просматривать страницу. Привилегии я храню в отдельной таблице, при добавлении нового места пользователем я думаю нужно ему добавлять так же новую привилегию, я прав??
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.09.2015, 01:41
Ответы с готовыми решениями:

Как получить доступ к Spring Security из jsp?
Везде предлагают <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>, но ссылка не работает. Вариант передавать...

Spring Security - анонимный и авторизованный доступ
Всем доброго времени. Есть REST метод, использующий авторизацию. Параметры заданны через аннотацию...

spring-security доступ: а тому ли я дала
Нет, я не девушка, просто решил привлечь внимание таким заголовком который вполне отражает суть проблемы :) Считайте что вопрос задаёт мой...

8
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
25.09.2015, 11:10
dimitrij94, на клиенте пишите логику проверки можно ли удалять\править. На сервере ещё раз проверяйте права.
На чем написан клиент?
0
0 / 0 / 0
Регистрация: 06.03.2015
Сообщений: 39
25.09.2015, 15:57  [ТС]
Это веб приложение, клиент браузер. И по сути вопрос и заключался в том как проверить эти права.

Допустим клиент приложения хочет просмотреть страницу заведения, он обращается по адресу:
Контролер достанет из БД информацию о заведении, и передаст ее на JSP представление.
Кажется все просто добавить только роль PLACE_OWNER и ему добавить привилегии для чтения и записи, но проблема в том что мест много и у каждого свой владелец и только владелец конкретно этого заведения может редактировать информацию а не все владельцы. То есть получается мне нужна возможность динамически регистрировать новые права для каждого пользователя.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
25.09.2015, 16:14
dimitrij94, когда отдаете страницу на клиент, включайте или отключейте возможность редактирования в зависимосит от пользователя который запросил страницу. Так же когда приходит запрос на редактирование, делайте ещё одну проверку чтобы не полагаться на клиент.
0
40 / 40 / 20
Регистрация: 14.05.2015
Сообщений: 116
25.09.2015, 19:08
dimitrij94,
Цитата Сообщение от dimitrij94 Посмотреть сообщение
только владелец имел права на редактирование и удаление, в то время как другие пользователи могли только просматривать страницу.
Цитата Сообщение от dimitrij94 Посмотреть сообщение
Контролер достанет из БД информацию о заведении, и передаст ее на JSP представление.
пусть он вместе с инфо о заведении достаёт и передаёт логин владельца. А в jsp
HTML5
1
2
3
4
5
<c:if test="${pageContext.request.userPrincipal.name == ${ownerLogin}}">
            <div class="edit">
                <a href="/edit">EDIT</a>
            </div>
</c:if>
т.е. див edit будет виден только владельцу.

Добавлено через 2 минуты
dimitrij94, ну и раз вы на jsp, почитайте возможности пространства имён <security>.
1
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
25.09.2015, 19:16
Лучший ответ Сообщение было отмечено dimitrij94 как решение

Решение

Цитата Сообщение от lyolik Посмотреть сообщение
почитайте возможности пространства имён <security>.
Этого будет мало в данном случае имхо т.к доступ зависит не просто от роли пользователя а от принаджлежности ему некоторого инстанса домейна. Надо будет писать свой security voter и прописывать там эту логику.

Так же на сервере все равно надо проверять в момент запросы т.к инфа с клиента недостоверна.
1
40 / 40 / 20
Регистрация: 14.05.2015
Сообщений: 116
25.09.2015, 19:25
KEKCoGEN, вы правы, конкретно в этом случае <security> не поможет.
1
0 / 0 / 0
Регистрация: 06.03.2015
Сообщений: 39
25.09.2015, 21:17  [ТС]
Спасибо, но это не совсем то что я спрашиваю, вопрос в том КАК это сделать.

Допустим, вот код контроллера что возвращает страницу
Но я не знаю как достать GrandedAuthorities.

Java
1
2
3
4
5
6
7
8
9
10
11
12
@RequestMapping(value = "/place_profile/{id}")
    public ModelAndView getPlaceProfilePage(@PathVariable("id") String id, WebRequest request){
 
//????????
Principal principal = request.getPrincipal();
 
if(principal.get....){
                return new ModelAndView("place_profile","place",db.getPlaceById(Long.valueOf(id)));
    }
else{
                return  new ModelAndeView("error","error_message",message);
}
Вот мой security config:

Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<security:http use-expressions="true" auto-config="true">
        <security:form-login login-processing-url="/login"
                             login-page="/index"
                             authentication-failure-url="/index?erorr=true"
                             authentication-success-handler-ref="mySimpleUrlAuthenticationSuccessHendler"/>
        <security:logout logout-url="j_spring_security_logout" logout-success-url="/index"/>
        <security:intercept-url pattern="browzer/owner/**" access="ROLE_OWNER"/>
 
    </security:http>
 
    <security:authentication-manager>
        <security:authentication-provider ref="customAuthenticationProvider"/>
    </security:authentication-manager>



Вот код customAuthenticationProvider-а, во многих туториалах также упоминаеться UserDetailsService, но мне совершенно не понятно что это и зачем он нужен.

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        String name = authentication.getName();
        String password = authentication.getCredentials().toString();
        PlaceUser user=  idbBean.authorization(name, password);
 
        if(user!=null){
                if(!user.isEnabled()){
                    return null;
                }
 
            List<Authorities> authoritiesList =user.getAuthorities();
            int size =authoritiesList.size();
 
            List<GrantedAuthority>authorities = new ArrayList<>(size);
            for (int i = 0; i < size; i++) {
                authorities.add(new SimpleGrantedAuthority(authoritiesList.get(i).getAuthority()));
            }
            return new UsernamePasswordAuthenticationToken(name,password,authorities);
        }
        return null;
    }


Добавлено через 1 час 47 минут
Извините у меня наверное от температуры мозг отказывает. Не обращайте внимания. Хотя вопрос о разнице между UserDetailsService и AuhtentificationProvider остается в силе.
0
40 / 40 / 20
Регистрация: 14.05.2015
Сообщений: 116
26.09.2015, 12:15
Лучший ответ Сообщение было отмечено dimitrij94 как решение

Решение

dimitrij94, UserDetailsService нужен в случае использования вами DaoAuthenticationProvider. Этот провайдер обычно и используют, если хранят данные пользователей в бд. Это самый распространённый случай, поэтому во многих туториалах и встречается.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.09.2015, 12:15
Помогаю со студенческими работами здесь

HP 2530 48G -безопасноть,обеспечить доступ только двум ПК
Есть сервер, к которому имеет доступ только два компа. Используя access list разрешил к порту свича этим двум компам доступ к серверу по IP...

Jetty embedded + Spring MVC + Spring Security
Добрый день. По роду работы приходилось писать на JavaSE, в том числе и сложные клиент/серверные программы. Использовал Netty, Apache...

Обеспечить доступ к анонимному каталогу сайта только определенной группе пользователей
Задача: обеспечить доступ к сайту анонимных пользователей из Интернета, к защищенному каталогу сайта обеспечить доступ только пользователям...

Как подключить Spring Security c минимальными настройками
У меня основной код написан только на Java configs. Конфигурационные файлы @Import(value = {ServiceConfiguration.class, ...

Spring Security Как реализовать login контроллер
При аутентификации пользователя я получаю куки, который я использую для авторизации и дальнейшего использования некоторых контроллеров....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru