У меня есть Grails, работающие с основными плагинами безопасности vaadin и spring, но я не могу объединить их три. Если я перехожу на страницу, где я использую @Secured, она работает так, как должна. Но если я поставлю @Secured в свой класс приложения vaadin, это ничего не сделает. Что я хочу сделать, так это защитить все приложение vaadin, а затем защитить некоторые вещи в этом приложении для ролей с более высоким уровнем полномочий. Что я здесь делаю неправильно? Если бы кто-нибудь мог указать мне правильное направление, это было бы здорово. Спасибо!
Grails, Vaadin и Spring Security Plugin вместе
Ответы (3)
Взгляните на эту публикацию. - он помещает защищаемые методы в сервисный класс Grails, где работают аннотации, и вызывает сервисные методы из приложения vaadin.
(Имейте в виду, что в приложениях vaadin не рекомендуется полагаться на внедрение зависимостей, см. getBean(String beanName) getBean(Class beanType) в документация по плагину
Вы пытались настроить сопоставление URL-адресов в Config.groovy?
Аннотацию @Secured следует использовать в классах контроллеров Grails.
Вам необходимо использовать службы Grails в приложении Vaadin. Используя плагин Vaadin, объявите свой сервис в пользовательском интерфейсе или любом компоненте Vaadin, например:
import com.vaadin.grails.Grails
import com.company.app.SecurityService
class <YourComponent> extends CustomComponent implements View {
def securityService = Grails.get(SecurityService)
...
<use securityService in your component's methods>
}
В вашей службе grails с именем «securityService» подключите springSecurityService и используйте аннотации или что-либо, предоставленное плагином spring-security grails. Более того, благодаря совершенству Grails, сервисы уже являются транзакционными.
@Transactional
class SecurityService {
def springSecurityService
def signOut() {
SCH.context.authentication = null
}
boolean isSignedIn() {
return springSecurityService.isLoggedIn()
}
User getCurrentUser() {
return springSecurityService.currentUser
}
... Или что касается безопасности.