В Play 1.2 есть ли какой-либо способ защитить контроллер, предоставляемый модулем, без редактирования исходного кода модуля?

#java #model-view-controller #module #controller #playframework

#java #model-view-controller #модуль #контроллер #playframework

Вопрос:

Я хотел бы использовать контроллер, предоставляемый в модуле, но контроллер не защищен. Я не хочу редактировать исходный код модуля, поскольку это приведет к накладным расходам на обслуживание. Предлагает ли Play какое-либо решение этой проблемы?

Ответ №1:

С помощью Secure-Module вы не можете этого сделать. Я работаю над модулем для обеспечения такой функциональности, но он не закончен, потому что мне нужно написать больше тестов и часть управления пользователями и некоторые теги. Однако, если вам интересно, я могу отправить вам ссылку на репозиторий. Он должен соответствовать вашим требованиям.

Deadbolt, похоже, тоже не работает.

Комментарии:

1. Спасибо, что подтвердили мои подозрения. Мне очень интересен ваш модуль.

2. Я пытаюсь связаться с вами по электронной почте.

Ответ №2:

Подход «грубой силы» к этому заключается в том, чтобы не включать маршруты модуля (или, по крайней мере, не разрешать прямой доступ к контроллерам, которые вы хотите защитить), и вместо этого разрешить доступ к модулю только через один из ваших собственных контроллеров. Затем управление доступом можно применить в вашем собственном контроллере.

Ответ №3:

Вы должны переопределить контроллер модуля своим собственным контроллером, который делегирует вызовы методов контроллера вашими методами. Предположительно, все, что вам нужно сделать, это создать контроллер, который расширяет модуль контроллера, который вы хотите защитить, добавить @With(Secure.class ) и аннотации @Check к нему, а также измените маршруты, чтобы указывать на этот новый контроллер вместо контроллера модуля, который он расширяет.

Посмотрите на пример модуля CRUD — https://www.playframework.com/documentation/1.2.2/guide8

У них есть Posts controller, расширяющий CRUD, защищенный с помощью Secure module. Контроллер Posts не имеет собственных методов, но эффективно наследует их из CRUD (с точки зрения Play router):

 package controllers;

import play.*;
import play.mvc.*;

@With(Secure.class)
public class Posts extends CRUD {    
}