Динамическая безопасность пружины в зависимости от переменной пути, значения параметров запросаJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Динамическая безопасность пружины в зависимости от переменной пути, значения параметров запроса

Сообщение Anonymous »

Предположим, вам нужно ограничить доступ к Post/users/{id} , чтобы разрешить только тем пользователям, идентификатор которого {id} . Ваша безопасность больше не является полностью статичной, это зависит от фактического значения переменной пути (это также может быть какой-то параметр запроса).
Предполагая, что пружина и JWT-ваш выбор, это то, как вы сделаете это.

Код: Выделить всё

// @RestController class
@PutMapping("/{id}")
@PreAuthorize("@userPermissionService.isCurrentUserIdEqualTo(#id)")
public ResponseEntity updateUser(@PathVariable long id,
@RequestBody UpdateUserRequestDto userRequestDto) {
// some business logic
}
< /code>
@Service
public class UserPermissionService {

public boolean isCurrentUserIdEqualTo(String userId) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null || !authentication.isAuthenticated()) return false;
Jwt jwt = (Jwt) authentication.getPrincipal();
Long currentUserId = jwt.getClaim("userid");
return currentUserId != null && currentUserId.toString().equals(userId);
}
}
< /code>
@Configuration
@EnableMethodSecurity
public class SecurityConfig {
// your security config
}
< /code>
        
org.springframework.boot
spring-boot-starter-oauth2-resource-server

< /code>
Это работает, но есть несколько бухте. Если userpermissionservice 
- это интерфейс, реализованный userpermissionserviceimpl , имя боба будет userpermissionserviceimpl . Теперь вам придется объединить свой класс контроллера с реализацией или вручную указать его имя бобов, а затем перемещать эту строку имени каждый раз, когда вы хотите изменить пользовательский PreePermissionService , который вы используете.

Код: Выделить всё

@Service("userPermissionService") // first, I want to use this implementation...
public class UserPermissionServiceImpl implements UserPermissionService {
< /code>
@Service("userPermissionService") // ...but then I decide to use this one – move the bean name to another class!
public class UserPermissionServiceImpl2 implements UserPermissionService {
В -третьих, мне также не нравится тот факт, что он скрывает зависимость контроллера от userpermissionservice . Что я хотел бы сделать, так это явно объявить это как инъекционную зависимость.public class UserController {

// ...
private final UserPermissionService permissionService; // then somehow reference it
< /code>
Однако я не уверен, как это будет работать. Я почти наверняка не могу ссылаться на поля по имени в выражении Spel.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... ter-values
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Динамическая безопасность пружины в зависимости от переменной пути, значения параметров запроса
    Anonymous » » в форуме JAVA
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Динамическая безопасность пружины в зависимости от переменной пути, значения параметров запроса
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Процессор пружины пружины не выполняет
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как подключить безопасность реактивной пружины с базой данных JPA
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как подключить безопасность реактивной пружины с базой данных JPA
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»