package hompage
import logindetails.*
import login.User
import grails.plugins.springsecurity.Secured;
class RedirectController
{
def springSecurityService
def index() { }
/**
* This method will redirect the user if it has the role "ROLE_ADMIN"
*/
@Secured(['ROLE_ADMIN'])
def adminhomepage =
{
render(view: "adminhome")
}
/**
* This method will redirect the user if it has the role "ROLE_USER"
*/
@Secured(['ROLE_USER'])
def userhomepage=
{
render(view: "userhome")
}
}
这是我的代码,我想重定向到adminhome,当且仅当角色是ROLE_ADMIN时,如果角色是ROLE_USER,我想重定向到userhome。
请帮我实现此代码。
我正在使用netbeans IDE,并且有导入 import grails.plugins.springsecurity.Secured
的警告(如红色惊叹号,通常显示为java代码)unable to resolve class grails.plugins.springsecurity.Secured @ line 5, column 1.
即使导入存在,我也没有得到它的问题是什么?
答案 0 :(得分:5)
包已从grails.plugins重命名为grails.plugin
import grails.plugin.springsecurity.annotation.Secured
请使用此。 参考:source
答案 1 :(得分:2)
检查你的类路径,清理grails,并确保插件存在于BuildConfig.groovy中。
答案 2 :(得分:0)
我也在Netbeans中收到警告;它对我没有任何影响。一切仍然可以编译并运行良好。
@Secured注释不会进行任何类型的重定向 - 它只是确保一旦你被发送就允许你进行该动作。
我想确保我理解 - 无论他们有什么角色,如果有人去'adminHomeController / index'他们被重定向到'adminHomeController / adminhomepage.gsp'或者他们得到'adminHomeController / index.gsp'服务了?如果重定向它们,那么您提供的代码中没有任何内容可以导致这种情况发生。你有任何URL映射会这样做吗?
或者是真正的问题,如果有人没有ROLE_USER,他们仍然可以去'adminHomeController / adminhomepage'?如果发生了这种情况,请确保在配置文件中包含以下内容:
grails.plugins.springsecurity.securityConfigType = "Annotation"
然后重新启动应用程序并尝试以没有ROLE_USER的用户身份访问adminhomepage。如果他们仍然可以到达那里,确保他们真的没有ROLE_USER。
如果要在登录时重定向某人,则有更全面的方法来处理此问题,例如创建自定义AuthSuccessHandler,但这有点复杂。要以这种方式重定向,我会做这样的事情:
import org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils.*
def index() {
if(ifAnyGranted("ROLE_ADMIN")) {
redirect(action: 'adminhomepage')
} else if(ifAnyGranted("ROLE_USER")) {
redirect(action: 'userhomepage')
}
}
def adminhomepage() {
//admin stuff
}
def userhomepage() {
//user stuff
}
答案 3 :(得分:0)
我遵循了您的评论中列出的相同教程并遇到了同样的问题。正如本文中所述,“错误”并未阻止我的任何代码从命令行构建。但作为Grails的初学者,在最基本的应用程序游戏中如此早地看到小红X可能会令人沮丧。
由于应用程序从命令行编译并运行,因此它肯定是IDE的一个问题。我检查了我的插件,没有列出Spring Security。右键单击插件 - >打开Grails插件管理器并通过STS安装。它将卸载并重新安装相同的插件。我正在运行旧版本的STS,所以希望这可以通过更新的版本来修复。
希望这可以帮助任何偶然发现这个老线程的人。