I recently moved from the JSecurity plugin to Spring Security. How do I get the authenticated user from within my controllers?
views:
1290answers:
2
+5
A:
I'm using 0.5.1 and the following works for me:
class EventController {
def authenticateService
def list = {
def user = authenticateService.principal()
def username = user?.getUsername()
.....
.....
}
}
John Wagenleitner
2009-04-22 00:50:31
Great- thanks! Just a typo in your above code. It should be def username = user?.getUsername()
Mike Sickler
2009-04-22 00:56:53
Thanks for catching that, I corrected it.
John Wagenleitner
2009-04-22 03:26:30
+8
A:
It's not currently documented, but in the plugin installation file, there are 3 methods that it adds to every controller so that you don't actually have to inject the authenticationService:
private void addControllerMethods(MetaClass mc) {
mc.getAuthUserDomain = {
def principal = SCH.context?.authentication?.principal
if (principal != null && principal != 'anonymousUser') {
return principal?.domainClass
}
return null
}
mc.getPrincipalInfo = {
return SCH.context?.authentication?.principal
}
mc.isUserLogon = {
def principal = SCH.context?.authentication?.principal
return principal != null && principal != 'anonymousUser'
}
}
This means that you can just call
principalInfo
To get the principal object. It also has "isUserLogin" to see if the user is logged and "authUserDomain" to get the actual domain class instance (the Person/User) associated with the principal of the logged in user.
Ted Naleid
2009-04-22 06:13:09
I spent an hour and a half banging my head against the keyboard trying to get Acegi plug to work with the File Upload pattern shown in http://www.packtpub.com/article/file-sharing-in-grails until I found this. Thanks!
Visionary Software Solutions
2009-11-16 07:08:37