powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Security
25 сообщений из 40, страница 1 из 2
Spring Security
    #38222276
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начал знакомиться с Spring Security, прочел примерно половину документации и меня не покидает ощущение, что в этом пакете все как-то угловато, нет гибкости. Так как опыт работы с пакетом отсутствует, надеюсь я ошибаюсь.
Насколько удобно использовать, если основной функционал, который требует аутентификации/авторизации работает через ajax?
Гибкая настройка модели в зависимости от прав доступа (т.е. какие данные будут отображать на странице, а какие нет).
...
Рейтинг: 0 / 0
Spring Security
    #38222512
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, ошибаешься, причем, конкретно. Очень гибкая штука. Позволяет создать любую кастомную авторизацию.
...
Рейтинг: 0 / 0
Spring Security
    #38222515
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckДа, ошибаешься, причем, конкретно. Очень гибкая штука. Позволяет создать любую кастомную авторизацию.
Тогда имеет смысл продолжить чтение)
...
Рейтинг: 0 / 0
Spring Security
    #38222518
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не думаю. Документация - это только помощник, но не учебник. Надо на реальном проекте пробовать. Или реальные примеры рассматривать.
...
Рейтинг: 0 / 0
Spring Security
    #38222525
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckНе думаю. Документация - это только помощник, но не учебник. Надо на реальном проекте пробовать. Или реальные примеры рассматривать.
У меня изначально было желание ради практики сделать небольшой велосипед на AOP, но сначала все таки решил ознакомиться с тем что уже имеется. Примеры я просмотрел, они как обычно не особо подробные. Базовые вещи из документации понятнее.
...
Рейтинг: 0 / 0
Spring Security
    #38222793
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck, а легко ли реализуется контроль доступа к странице, если к странице иметь доступ должен только один пользователь или группа пользователей? Например страница "Редактирование профиля", к которой доступ должен иметь только один конкретный пользователь.
...
Рейтинг: 0 / 0
Spring Security
    #38222802
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm,

мега легко, тегом одним
...
Рейтинг: 0 / 0
Spring Security
    #38222804
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никrdm,

мега легко, тегом одним
А можно ссылочку, я нагуглить не могу такой пример.
...
Рейтинг: 0 / 0
Spring Security
    #38222812
Фотография dmitriyche
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmА можно ссылочку, я нагуглить не могу такой пример.
Почитайте SPRING SECURITY 3.1
И купите её , если ответит на ваши вопросы.
...
Рейтинг: 0 / 0
Spring Security
    #38222814
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitriycherdmА можно ссылочку, я нагуглить не могу такой пример.
Почитайте SPRING SECURITY 3.1
И купите её , если ответит на ваши вопросы.
К сожалению, я не настолько хорошо владею английским)
...
Рейтинг: 0 / 0
Spring Security
    #38222816
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, developer-friendly способ - это указать пользователю его Authority из энума, реализующего интерфейс GrantedAuthority, и создать авторизационный объект (сущность, бин), реализующий интерфейс UserDetails, который и скармливать реализации Authentication и/или AuthenticationProvider.
А дальше в конфиге спринга (в springmvc-servlet.xml вроде должно) прописать:
Код: xml
1.
<security:global-method-security secured-annotations="enabled" jsr250-annotations="enabled" pre-post-annotations="enabled"/>


И уже в контроллере использовать аннотации типа
Код: java
1.
@PreAuthorize("hasRole('MY_SUPER_PUPER_USER')")



Вроде как у Spring Security по дефолту уже есть свой набор типа USER, ADMINISTRATOR, ANONYMOUS, но я с базовой настройкой имел дело несколько лет назад, поэтому не подскажу. Но если использовать, то не надо переопределять соответствующие классы.
...
Рейтинг: 0 / 0
Spring Security
    #38222821
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckДумаю, developer-friendly способ - это указать пользователю его Authority из энума, реализующего интерфейс GrantedAuthority, и создать авторизационный объект (сущность, бин), реализующий интерфейс UserDetails, который и скармливать реализации Authentication и/или AuthenticationProvider.
А дальше в конфиге спринга (в springmvc-servlet.xml вроде должно) прописать:
Код: xml
1.
<security:global-method-security secured-annotations="enabled" jsr250-annotations="enabled" pre-post-annotations="enabled"/>


И уже в контроллере использовать аннотации типа
Код: java
1.
@PreAuthorize("hasRole('MY_SUPER_PUPER_USER')")



Вроде как у Spring Security по дефолту уже есть свой набор типа USER, ADMINISTRATOR, ANONYMOUS, но я с базовой настройкой имел дело несколько лет назад, поэтому не подскажу. Но если использовать, то не надо переопределять соответствующие классы.
Мне кажется вы меня не совсем поняли. Я говорю не про роли, о которых обычно идет речь в примерах(ROLE_*).
Допустим имеется 1000 пользователей, каждому из которых нужно предоставить доступ к определенным, но разных адресам.
Например local/user/rdm, local/user/IDVsbruck.
Создавать для каждого пользователя отдельную роль(ROLE_rdm)? Наверно это не правильный подход, и роли о которых вы говорите используются для более общего разделения (администраторы, пользователи, анонимы).
...
Рейтинг: 0 / 0
Spring Security
    #38222829
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, тут уже надо играться с mapping'ом. К примеру, у меня была похожая ситуация в проекте, правда, там учавствовали рассматриваемые данные, а не полномочия пользователя, но все же схожая:
Код: java
1.
2.
3.
4.
5.
@RequestMapping(value = "/company/{webLocal}/profile", method = RequestMethod.GET)
@PreAuthorize("hasRole('USER')")
public ModelAndView profileEdit(@PathVariable String webLocal, HttpServletRequest request, Authentication authentication) {
    ... //тут по webLocal вытаскиваем сущность из базы
}

то есть по условному имени компании в URL можно попасть в профиль.

В твоем случае получать в @PathVariable псевдоним пользователя и по нему уже делать манипуляции (проверять полномочия, отдавать требуемые данные или страницу). Правда, данный способ лишь косвенно может касаться Spring Security.

Если же надо при переходе по одной и той же ссылке получать разный контент, то играться уже внутри метода контроллера с authentication и в зависимости от полученного пользователя отдавать требуемые данные.
...
Рейтинг: 0 / 0
Spring Security
    #38222830
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck, я надеялся, что такая функциональность доступна без моих дополнительных манипуляций) В таком случае особых преимуществ этого пакета, перед своим велосипедом я не вижу.
...
Рейтинг: 0 / 0
Spring Security
    #38222832
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckДумаю, тут уже надо играться с mapping'ом. К примеру, у меня была похожая ситуация в проекте, правда, там учавствовали рассматриваемые данные, а не полномочия пользователя, но все же схожая:
Код: java
1.
2.
3.
4.
5.
@RequestMapping(value = "/company/{webLocal}/profile", method = RequestMethod.GET)
@PreAuthorize("hasRole('USER')")
public ModelAndView profileEdit(@PathVariable String webLocal, HttpServletRequest request, Authentication authentication) {
    ... //тут по webLocal вытаскиваем сущность из базы
}

то есть по условному имени компании в URL можно попасть в профиль.

В твоем случае получать в @PathVariable псевдоним пользователя и по нему уже делать манипуляции (проверять полномочия, отдавать требуемые данные или страницу). Правда, данный способ лишь косвенно может касаться Spring Security.

Если же надо при переходе по одной и той же ссылке получать разный контент, то играться уже внутри метода контроллера с authentication и в зависимости от полученного пользователя отдавать требуемые данные.
В вашем примере как я понял к профилям компаний опять же имеют все пользователи с ролью "USER".
Я бы хотел что-то вроде

Код: java
1.
2.
3.
4.
5.
@RequestMapping(value = "/user/{name}/profile", method = RequestMethod.GET)
@PreAuthorize("hasRole(''{name}")") //Доступ разрешен только для пользователя с именем {name}
public ModelAndView profileEdit() {
 //...
}


если скажем разных {name} у нас тыща)
...
Рейтинг: 0 / 0
Spring Security
    #38222836
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spring Security не оперирует именами и никами, он оперирует ролями. Опять-таки, я уверен, что гибкость SS позволит реализовать кастомную авторизацию с переопределенными кастомными условиями для входа, но чего-то мне кажется, что это неправильное, тупиковое и некошерное решение.

Что мешает пойти по простому пути?
Код: java
1.
2.
3.
4.
5.
6.
7.
@RequestMapping(value = "/local/user/{userName}")
@PreAuthorize("hasRole('AUTHORIZED_USER')") //откидывает анонимусов, юзеров без полномочий
public ModelAndView userPage(@PathVariable String userName, Authentication authentication) {
    OurUserFromBase user = (OurUserFromBase) authentication.getPrincipal();
    if (!user.getName.equalsIgnoreCase(userName)) return new ModelAndView("error");
    return new ModelAndView("page_of_" + user.getName());
}

Просто надо убедиться, что Вася - это Вася, и что права у него есть, и учетка в базе ...
...
Рейтинг: 0 / 0
Spring Security
    #38222838
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckSpring Security не оперирует именами и никами, он оперирует ролями. Опять-таки, я уверен, что гибкость SS позволит реализовать кастомную авторизацию с переопределенными кастомными условиями для входа, но чего-то мне кажется, что это неправильное, тупиковое и некошерное решение.

Что мешает пойти по простому пути?
Код: java
1.
2.
3.
4.
5.
6.
7.
@RequestMapping(value = "/local/user/{userName}")
@PreAuthorize("hasRole('AUTHORIZED_USER')") //откидывает анонимусов, юзеров без полномочий
public ModelAndView userPage(@PathVariable String userName, Authentication authentication) {
    OurUserFromBase user = (OurUserFromBase) authentication.getPrincipal();
    if (!user.getName.equalsIgnoreCase(userName)) return new ModelAndView("error");
    return new ModelAndView("page_of_" + user.getName());
}

Просто надо убедиться, что Вася - это Вася, и что права у него есть, и учетка в базе ...
Не проще ли тогда будет без ss

Код: java
1.
2.
3.
4.
5.
6.
@RequestMapping(value = "/local/user/{userName}")
public ModelAndView userPage(@PathVariable String userName, @Cookie("some") String token) {
MyUser user =  myUserService.getUserByUserNameAndToken(userName, token); 
    if (user == null) return new ModelAndView("error");
    return new ModelAndView("page_of_" + user.getName());
}
...
Рейтинг: 0 / 0
Spring Security
    #38222839
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p.s. Я баиньки)
...
Рейтинг: 0 / 0
Spring Security
    #38222840
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть, если я - это я, но зашел с другого компа, то я не попаду на страницу? Или смысл в том, чтобы устанавливать куку при авторизации?
Никто не мешает так делать; если все применение Spring Security базируется на таком доступе, то естественно, можно пренебречь фреймворком, хотя такой подход сомнителен. Мне казалось, преимущества использования фреймворка очевидны.
...
Рейтинг: 0 / 0
Spring Security
    #38223012
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckТо есть, если я - это я, но зашел с другого компа, то я не попаду на страницу? Или смысл в том, чтобы устанавливать куку при авторизации?
Никто не мешает так делать; если все применение Spring Security базируется на таком доступе, то естественно, можно пренебречь фреймворком, хотя такой подход сомнителен. Мне казалось, преимущества использования фреймворка очевидны.
Вот я что-то пока их для себя не вижу.
...
Рейтинг: 0 / 0
Spring Security
    #38223942
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли какие-нибудь популярные аналоги/конкуренты ss?
...
Рейтинг: 0 / 0
Spring Security
    #38224027
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Apache Shiro
...
Рейтинг: 0 / 0
Spring Security
    #38224415
Все привет.

Хотел писать свой топик, но раз тут обсуждают Spring Security, задам по нему свой вопрос здесь.

Все что я видел про SS, оно было в контексте страничек и доступа к ним.
А что делать если у меня проект на Vaadin, и страничка всегда одна?
А мне надо в зависимости от роли выводить или не выводить некоторые объекты.
Или же надо разделить такие возможности как сохранение сущности, изменение ее или удаление.
Т.е. чтобы обычный пользователь мог сохранить сущность в базе, но изменить ее после сохранения уже не мог.
Сейчас сделал по простому, есть класс в котором много методов вроде

Код: java
1.
2.
3.
4.
canViewStore( User )
canSaveProduct( User )
canUpadateProduct( User )
и т.д.



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

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
if( canViewStore(User) )
{
    // тут делает то что надо
}
else
{
    showMessage( "Нет доступа" );
}



В такой ситуации SS вообще поможет? И имеет ли смысл использовать его для таких простых проверок?
Будет ли с ним проще работать чем с моим простым, как палка, великом?
...
Рейтинг: 0 / 0
Spring Security
    #38224436
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищущий ЗнанияА что делать если у меня проект на Vaadin, и страничка всегда одна?
как показывает практика, многие фреймворки имеют интеграцию с какой-то секьюрити. гуглил по ваадину?

Ищущий ЗнанияА мне надо в зависимости от роли выводить или не выводить некоторые объекты.
как правило решается на уровне фреймворка написанием копонентов/миксинов, которые опрашивают security framework
например

Код: html
1.
2.
3.
<hasAnyOf roles="ROLE_ADMIN,ROLE_SUPER_USER">
   <table/>
</hasAnyOf>




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


Ищущий ЗнанияВ такой ситуации SS вообще поможет?
тебе видней. зависит от сложности требуемого решения и удобности интеграции в фреймворк Х.

Ищущий Знания И имеет ли смысл использовать его для таких простых проверок?
Будет ли с ним проще работать чем с моим простым, как палка, великом?
являются ли специализированные фреймворки более универсальными и надежными чем велосипед? - как правило да.
проще ли с ними работать, чем со своим велосипедом? - зависит от.
...
Рейтинг: 0 / 0
Spring Security
    #38224479
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck, дочитал в документации до

Код: java
1.
2.
@PreAuthorize("#contact.name == authentication.name")
 public void doSomething(Contact contact);



кажется это то, что мне надо.
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Security
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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