我有一个项目,它将成为现有ERP应用程序的附加组件。我已经让SSO正常工作,具有基本的Spring Security设置(请参阅我的票证:Grails和CAS基本设置)。此外,我没有使用s2快速入门。
我对Java开发还是新手,所以请耐心等待。。。我一直在浏览文档和示例,在某些方面,我对所看到的内容感到更困惑。我有几个问题:
1)此设置允许我访问登录用户的用户名,但仅此而已?如何访问User对象以访问这些属性?现在,我正在使用:
def userDetails = springSecurityService.principal
then: userDetails ?.getUsername() to get the username
and: userDetails ?.getAuthorities() to get roles
这一切都正常,除了这是访问这些属性的最佳方式吗?i、 例如,userdetails中是否有其他属性,以及如何访问这些属性?
也许这个问题的答案取决于我下一步该怎么做。。。
2) 我正在使用CAS进行身份验证,但现在我想从LDAP中提取一些附加属性。我尝试过创建这样的自定义UserDetailsServicehttp://grails-plugins.github.io/grails-spring-security-core/docs/manual/guide/userDetailsService.html但即使在我通过了最初的编译错误之后,它似乎仍然需要用户域类。如果我想用附加值扩展UserDetails,我必须实现用户域类吗?
在我的例子中,我真的只需要一个LDAP属性,而这一切似乎需要很多提升才能实现。我看了又看,但找不到一个好的工作/简单的例子来做这件事。。。许多人参与了Gorm或安装了s2 quickstart。
蒂亚,
豆
这是我的配置...见最后的错误:
grails.plugins.springsecurity.providerNames = ['casAuthenticationProvider']
grails.plugins.springsecurity.cas.active = true
grails.plugins.springsecurity.cas.sendRenew = false
grails.plugins.springsecurity.cas.serverUrlEncoding = 'UTF-8'
grails.plugins.springsecurity.cas.key = 'changeme'
grails.plugins.springsecurity.cas.loginUri = '/login'
grails.plugins.springsecurity.cas.serviceUrl = '${grails.serverURL}/j_spring_cas_security_check'
grails.plugins.springsecurity.cas.serverUrlPrefix = 'https://cas2.mydomain.com:8443/cas'
grails.plugins.springsecurity.cas.proxyCallbackUrl = '${grails.serverURL}/secure/receptor'
grails.plugins.springsecurity.cas.proxyReceptorUrl = '/secure/receptor'
grails.plugins.springsecurity.logout.afterLogoutUrl = 'https://cas2.mydomain.com:8443/cas/logout?service=' + appProtocol + '://cas2.mydomain.com:' + appPort + '/' + appName + '/'
grails.plugins.springsecurity.cas.artifactParameter = 'ticket'
grails.plugins.springsecurity.cas.serviceParameter = 'service'
grails.plugins.springsecurity.cas.filterProcessesUrl = '/j_spring_cas_security_check'
grails.plugins.springsecurity.cas.useSingleSignout = true
grails.server.loopback.url = ""
//Spring Security Core Config
grails.plugins.springsecurity.rejectIfNoRule = false // V.044::to fix redirect loop::true
grails.plugins.springsecurity.securityConfigType = "InterceptUrlMap"
/*
* Order matters...put the most restrictive first
*/
grails.plugins.springsecurity.interceptUrlMap = [
'/js/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
'/css/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
'/images/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
'/login/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
'/logout/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
'/secure/receptor': ['IS_AUTHENTICATED_ANONYMOUSLY'], // <- allows CAS to contact the receptor
'/protected/**': ['IS_AUTHENTICATED_FULLY'],
'/unprotected/**': ['IS_AUTHENTICATED_ANONYMOUSLY','IS_AUTHENTICATED_FULLY'],
'/filtered/edit': ["hasRole('ROLE_XYZ')"],
'/filtered/create': ["authentication.uid == 'criderk'"],
'/filtered/list': ["hasRole('ROLE_44808')"],
'/filtered/index': ["hasRole('ROLE_44808')"],
'/': ['IS_AUTHENTICATED_ANONYMOUSLY','IS_AUTHENTICATED_FULLY']
]
grails.plugins.springsecurity.ldap.search.attributesToReturn = ['uid','mail']
grails.plugins.springsecurity.userLookup.userDomainClassName = 'basecas_04.User'
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'basecas_04.UserRole'
grails.plugins.springsecurity.authority.className = 'basecas_04.Role'
// Place your Spring DSL code here
beans = {
// load ldap roles from spring security
initialDirContextFactory(org.springframework.security.ldap.DefaultSpringSecurityContextSource,
"ldap://xx.xx.xx.xx:389"){
userDn = "cn=admin,dc=mydomain,dc=com"
password = "pw"
}
ldapUserSearch(org.springframework.security.ldap.search.FilterBasedLdapUserSearch,
"ou=employees,dc=mydomain,dc=com", "uid={0}", initialDirContextFactory){
}
ldapAuthoritiesPopulator(org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator,
initialDirContextFactory,"ou=groups,dc=mydomain,dc=com"){
groupRoleAttribute = "gidNumber"
groupSearchFilter = "memberUid={1}"
searchSubtree = true
rolePrefix = "ROLE_"
convertToUpperCase = true
ignorePartialResultException = true
}
ldapUserDetailsService(org.springframework.security.ldap.userdetails.LdapUserDetailsService,
ldapUserSearch,
ldapAuthoritiesPopulator)
userDetailsService(basecas_04.CustomUserDetailsService)
}
package basecas_04
import org.codehaus.groovy.grails.plugins.springsecurity.GrailsUser
import org.springframework.security.core.GrantedAuthority
import org.springframework.security.core.userdetails.User
class MyUserDetails extends GrailsUser {
final String mail
MyUserDetails(String username, String password, boolean enabled,
boolean accountNonExpired, boolean credentialsNonExpired,
boolean accountNonLocked,
Collection<GrantedAuthority> authorities,
long id, String mail) {
super(username, password, enabled, accountNonExpired,
credentialsNonExpired, accountNonLocked, authorities, id)
this.mail = mail
}
}
package basecas_04
import org.codehaus.groovy.grails.plugins.springsecurity.GrailsUser import org.codehaus.groovy.grails.plugins.springsecurity.GrailsUserDetailsService import org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils import org.springframework.security.core.authority.GrantedAuthorityImpl import org.springframework.security.core.userdetails.UserDetails import org.springframework.security.core.userdetails.UsernameNotFoundException
import basecas_04.User
class CustomUserDetailsService implements GrailsUserDetailsService { static final List NO_ROLES = [new GrantedAuthorityImpl(SpringSecurityUtils.NO_ROLE)] UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException { return loadUserByUsername(username) } UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User.withTransaction { status ->
User user = User.findByUsername(username) if (!user) throw new UsernameNotFoundException('User not found', username)
def authorities = user.authorities.collect {
new GrantedAuthorityImpl(it.authority) }
return new MyUserDetails(user.username, user.password, user.enabled, !user.accountExpired,
!user.passwordExpired, !user.accountLocked,
authorities ?: NO_ROLES, user.id, user.mail) } } }
class User {
transient springSecurityService
String username
String password
String mail
//String displayName
boolean enabled
boolean accountExpired
boolean accountLocked
boolean passwordExpired
static constraints = {
username blank: false, unique: true
password blank: false
}
static mapping = {
password column: '`password`'
}
Set<Role> getAuthorities() {
UserRole.findAllByUser(this).collect { it.role } as Set
}
def beforeInsert() {
encodePassword()
}
def beforeUpdate() {
if (isDirty('password')) {
encodePassword()
}
}
protected void encodePassword() {
password = springSecurityService.encodePassword(password)
}
}
我出错了
2014-02-18 08:37:48,106[超文本传输协议-apr-8444-exec-9]错误错误。GrailsExceptionResolver-处理请求时发生MissingProperty tyException:[GET] /basecas_04/protected/list没有这样的属性:类的id:java.util.concurrent.LdapUserDetailsImpl可能的解决方案: dn。堆栈跟踪如下:basecas_04MissingProperty tyException:没有这样的属性:类的id:xecutor.java:615LdapUserDetailsImpl可能的解决方案: dn在java.lang.SpringSecurityShread.runorker.run的货币用户(SpringSecurityService.groovy:80)。grails.plugin.cache.web.filter.PageFragmentCachingFilter.do过滤器(PageFragmentCachingFilter.java:195)在grails.plugin.cache.web.filter.AbstractFilter.do过滤器(AbstractFilter.java:63)在SingleSignOutFilter.do过滤器(SingleSignOutFilter.java:65)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)在org.springframework.security.ldap.userdetails.ThreadPoolExector$Wgroovy.lang.(ThreadPoolEorg.springframework.security.ldap.userdetails.)在grails.plugins.springsecurity.ervice.get(T
对此有任何想法:
类:org没有这样的属性:id。springframework。安全ldap。用户详细信息。LdapUserDetailsImpl
在Spring Security bean迷宫中导航可能有点困难。好的一面是,一旦你掌握了方向,这就是一个非常强大和灵活的豆子迷宫:)
>
对于#2,此链接可能有助于:http://swordsystems.com/2011/12/21/spring-security-cas-ldap/
你的答案可能在这里:spring-security-ldap(如果你正在使用这个,因为我相信这是你也在使用的?):https://github.com/grails-plugins/grails-spring-security-ldap/blob/master/src/java/grails/plugin/springsecurity/ldap/userdetails/GrailsLdapUserDetailsManager.java-t
快速搜索:
安全ldap。用户详细信息。LdapUserDetailsManager
返回:
http://docs.spring.io/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/ldap/userdetails/LdapUserDetailsManager.html#loadUserByUsername(java.lang.字符串)
loadUserByUsername
公共UserDetails loadUserByUsername(String username)引发UsernameNotFoundException、DataAccessException
从接口复制的描述:UserDetailsService根据用户名定位用户。在实际实现中,搜索可能不区分大小写,也可能不区分大小写,具体取决于实现实例的配置方式。在这种情况下,返回的UserDetails对象的用户名可能与实际请求的用户名不同。。
Specified by:
loadUserByUsername in interface UserDetailsService
Parameters:
username - the username identifying the user whose data is required.
Returns:
**a fully populated user record (never null)**
我正在与Microsoft Graph一起管理Azure广告用户,但在访问用户对象的扩展属性时遇到了一些困难。该属性是在使用Azure AD Graph API创建用户时添加的,如果使用Azure AD API查询该用户,则会自动返回名为“extension_{appId}_{propertyName}”的扩展属性。我想使用Microsoft Graph访问此属性的值,但没有找到正确的调用。 我也
在简介一节中我们提到,客户端层暴露了一个供人类使用的用户界面。 客户端由两部分组成:一个只读的简单 HTML 页面和一个可交互的单页 JavaScript 应用。两者都从 JSON API 读取数据。 路由 论坛所有的默认路由都在 Flarum\Forum\ForumServiceProvider 中注册。每个路由有一个对应的 Action (动作)类, 这个类本质上就是控制器。每个动作接受一个
用户自定义扩展是用户自己创建的 JavaScript 文件,对 Selenium IDE 现有的功能进行定制以及功能扩展。通常这种定制和扩展是以自定义命令的形式来体现的,当然也不仅限于命令。 这里可以找到很多有用的扩展。 注意:这部分信息已经过时,我们将很快修改。 也许最受欢迎的 Selenium IDE 扩展就是流程控制,流程控制扩展将提供 while 循环和条件判断。这个扩展是 goto_se
我正在使用SCEP为我的WebService创建证书。在成功创建证书和启动服务器之后,我尝试通过浏览器访问wsdl,浏览器显示一条错误消息,该消息表示该应用程序不允许使用证书类型,错误代码:SEC_ERROR_INSAPPLAYATE_CER_TYPE。一位同事指出,我必须将扩展密钥属性中的密钥用法更改为“服务器身份验证”,并且应该在认证请求中这样做。 要创建一个新请求,我使用BouncyCast
在 Gradle 领域模型中所有被增强的对象能够拥有自己定义的属性. 这包括,但不仅限于 projects , tasks , 还有 source sets . Project 对象可以添加,读取,更改扩展的属性. 另外,使用 ext 扩展块可以一次添加多个属性. 例子 13.3. 使用扩展属性 build.gradle apply plugin: "java" ext { springV
本文向大家介绍django2.0扩展用户字段示例,包括了django2.0扩展用户字段示例的使用技巧和注意事项,需要的朋友参考一下 创建新项目,及应用 自定义 User 类 文件myapp/models.py 文件 myproj/settings.py 文件 myproj/admin.py 更新数据库 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢