1 / 1 / 1
Регистрация: 17.12.2010
Сообщений: 12
1

Spring Security. Не отрабатывает SpEL в @PostAuthorize

29.01.2016, 09:52. Показов 381. Ответов 2
Метки нет (Все метки)

Всем приветы!
Есть следующее.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Service
public class GameServiceImpl implements EntityService<Game> {
    
    private EntityDAO gameDAO;
 
    public void setGameDAO(EntityDAO gameDAO) {
        this.gameDAO = gameDAO;
    }
    @Override
    @Transactional
    public void removeEntity(int id) {
            Game game = findGame4Edit(id);
            if(game != null){
                this.gameDAO.removeEntity(id);
            }
    }
        
   @PostAuthorize("returnObject.user.u_name == principal.username")
   public Game findGame4Edit(int id){
           return (Game)this.gameDAO.getEntityById(id);
   }
}
spring-security.xml :

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
   
 <http auto-config="true" use-expressions="true">
        <intercept-url pattern="/game/remove/*" access="hasRole('ROLE_ADMIN')" />
        <form-login 
            login-page="/login" 
            default-target-url="/user/list/"
            authentication-failure-url="/loginfailed" 
            username-parameter="username"
            password-parameter="password" 
        />
        <logout logout-success-url="/logout" />
    </http>
    <global-method-security secured-annotations="enabled" pre-post-annotations="enabled"/>
    <authentication-manager>
        <authentication-provider>
            <jdbc-user-service 
                data-source-ref="dataSource" 
                users-by-username-query="select u_name as username, u_password as password, u_enabled as enabled from ksuser where u_name = ?"
                authorities-by-username-query="select u_name as username, r_title as authority from ksuser, role where u_role = idrole and u_name = ?" />
        </authentication-provider>
    </authentication-manager>
Модельки Game и User связаны корректно. В дебагере вижу, что в модели Game есть поле user, в котором объект User со всеми данными (id, u_name и пр.).
Мне нужно запретить удаление Game для всех, кроме владельца этой сущности, т.е. удалять только при true в "game.user.u_name == principal.username".
Я прописал в сервисе

Java
1
@PostAuthorize("returnObject.user.u_name == principal.username")
Но безрезультатно. Метод findGame4Edit() выполняется от любого пользователя с ролью "ROLE_ADMIN".
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2016, 09:52
Ответы с готовыми решениями:

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

Spring. Тесты и Spring-security
Вопрос из области почему так. Есть у меня такой вот тест: @ContextConfiguration(locations =...

Spring Security
Добрый день. Использую SpringSecurity: protected void configure(HttpSecurity http) throws...

Spring security
Пытаюсь сделать spring MVC + spring security. При запуске пишет Type Exception Report Message No...

2
Эксперт Java
2379 / 2208 / 561
Регистрация: 28.12.2010
Сообщений: 8,636
29.01.2016, 12:18 2
Дмитрий3.09, equals может вместо == ?
0
1 / 1 / 1
Регистрация: 17.12.2010
Сообщений: 12
29.01.2016, 18:24  [ТС] 3
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
equals может вместо == ?
Заменил на equals, но не работает
Java
1
@PostAuthorize("returnObject.user.u_name.equals(principal.username)")
Добавлено через 4 часа 39 минут
Мне помогли на другом ресурсе.
"Так и должно быть. Т.к. findGame4Edit вызывается из метода того-же бина, то аспект для аннотации @PostAuthorize не срабатывает - это просто вызов метода. Надо либо перенести @PostAuthorize в метод removeEntity, либо перенести метод findGame4Edit в другой бин, либо применить LTW для AspectJ."
Я перенёс вызов метода findGame4Edit в контроллер и аннотация заработала.
И это
Java
1
@PostAuthorize("returnObject.user.u_name == principal.username")
таки правильное выражение
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2016, 18:24

Spring security c 3 на 4
Не знаю почему, но после того, как перешел на spring security 4 возникает проблема. Захожу на...

Spring Security и MySQL
Ребята не могу подключить Spring Security в проект. В общем создал проект с помощью spring...

Spring Security logout
Как задать вылогинивание с сайта через определенное время, точнее обратил внимание, что меня с...

Проблема со Spring Security
Я создал проект и хочу его запустить. Но когда запускаю нетбинс выдает ошибку, можете помочь как...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru