使用简单的过滤器登录&我的grails应用程序中的安全性。 现在我需要使用不同的登录凭据连接到db-test1,具体取决于登录的用户角色。如果管理员登录获得写入权限,那么登录&如果用户角色登录,则只读。 如何使用过滤器实现它?
DataSource.groovy中
environments {
development {
/*IF LOGIN 'ADMIN' - SHOULD CONNECT USING THIS
dataSource {
username = 'admin'
password = 'Guard1an'
url = "jdbc:jtds:sqlserver://test1:1433;
MVCC=TRUE"
dbCreate = 'update'
}
/*IF LOGIN 'USER' - SHOULD CONNECT USING THIS*/
dataSource {
dbCreate = "update" // one of 'create', 'create-drop','update'
username = 'user'
password = 'tesoyear'
url = "jdbc:jtds:sqlserver://test1:1433;
}
dataSource_wldb1 {
username = 'gdx'
password = 'pinoil'
url = "jdbc:jtds:sqlserver://wldb:1433/IVR_GUARDIAN"
dbCreate = 'update'
}
}
SecuirityFilter.groovy
class SecurityFilters {
def filters = {
loginCheck(controller: 'load', action: '*') {
before = {
if (!session.user && !actionName.equals('login')) {
flash.message = "User is not Logged in.Please login "
redirect(controller:'user', action: 'index')
return false
}
}
}
}
}
答案 0 :(得分:0)
如果您想要保护控制器,那么使用@Secured注释应该足够(并且更好)。这允许您通过指定所需的用户角色来保护整个控制器或单个方法。查看http://blog.springsource.org/2010/08/11/simplified-spring-security-with-grails/了解更多详情。下面还有一个例子。
如果您需要更复杂的安全性,请检查spring-security-acl插件,该插件允许为特定数据库对象授予权限。
package org.example
import grails.plugins.springsecurity.Secured
class PostController {
@Secured(['ROLE_USER'])
def followAjax = { ... }
@Secured(['ROLE_USER', 'IS_AUTHENTICATED_FULLY'])
def addPostAjax = { ... }
def global = { ... }
@Secured(['ROLE_USER'])
def timeline = { ... }
@Secured(['IS_AUTHENTICATED_REMEMBERED'])
def personal = { ... }
}