嗯,事实证明,我的Role类中的compareTo
方法(Role实现GrantedAuthority)总是返回0.因此每个用户只有一个角色(因为它们存储在一个Set中)。
大家好,
我的申请表中有一些奇怪的行为。
我在User类中添加了几个字段(由Acegi创建),所以我可以设置一个过期的密码,记录最后N个密码,这样的东西。我们有9个角色,ROLE_ADMIN
是可以访问所有功能的“超级用户”。
部署应用程序后,用户开始抱怨他们无法使用它。他们可以登录,但只要他们想去某个地方,他们就会被拒绝访问,就好像他们没有角色一样。
每个用户都会发生这种情况,管理员除外(只有ROLE_ADMIN
),包含(ROLE_ADMIN
+其他角色)。
我甚至无法想到要开始。
我已经检查过,用户来自附带角色的数据库。
在SecurityConfig.groovy文件中检查角色。我担心问题出在其他地方,因为我有一个实际有效的项目标记版本。
这是我的SecurityConfig.groovy:
import com.mycompany.myapp.audit.Auditoria
security {
// see DefaultSecurityConfig.groovy for all settable/overridable properties
active = true
loginUserDomainClass = "com.mycompany.myapp.user.User"
authorityDomainClass = "com.mycompany.myapp.user.Role"
requestMapClass = "com.mycompany.myapp.user.Requestmap"
useRequestMapDomainClass = false
/** authenticationEntryPoint */
loginFormUrl = '/login/auth'
forceHttps = 'false'
ajaxLoginFormUrl = '/login/authAjax'
authenticationFailureUrl = '/login/authfail'
afterLogoutUrl = '/login/auth'
requestMapString = """\
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/=IS_AUTHENTICATED_REMEMBERED
/login/auth=IS_AUTHENTICATED_ANONYMOUSLY
/login/authajax=IS_AUTHENTICATED_ANONYMOUSLY
/login/authfail=IS_AUTHENTICATED_ANONYMOUSLY
/login/renew=IS_AUTHENTICATED_ANONYMOUSLY
/js/**=IS_AUTHENTICATED_ANONYMOUSLY
/css/**=IS_AUTHENTICATED_ANONYMOUSLY
/images/**=IS_AUTHENTICATED_ANONYMOUSLY
/plugins/**=IS_AUTHENTICATED_ANONYMOUSLY
/scan/uploadfile=IS_AUTHENTICATED_ANONYMOUSLY
/ticket/uploadfile=IS_AUTHENTICATED_ANONYMOUSLY
/analisis/list =ROLE_SUP_TECNICO, ROLE_OP_TECNICO, ROLE_OP_FUNCIONAL, ROLE_ADMIN
/analisis/hazzards/**=ROLE_SUP_TECNICO, ROLE_OP_TECNICO, ROLE_OP_FUNCIONAL, ROLE_ADMIN
/analisis/show/**=ROLE_SUP_TECNICO, ROLE_OP_TECNICO, ROLE_ADMIN
/analisis/create/**=ROLE_SUP_TECNICO, ROLE_ADMIN
/analisis/edit/**=ROLE_SUP_TECNICO,ROLE_ADMIN
/hazzardsreport/**=ROLE_SUP_TECNICO, ROLE_OP_TECNICO, ROLE_OP_FUNCIONAL, ROLE_REPORTE_VULNERABILIDAD, ROLE_ADMIN
/mistaken/**=ROLE_SUP_TECNICO, ROLE_OP_TECNICO, ROLE_ADMIN
/hazzardtype/**=ROLE_SUP_TECNICO, ROLE_ADMIN
/** MODULO NORMAS */
/report/**=ROLE_OP_FUNCIONAL, ROLE_ADMIN
/norm/**=ROLE_OP_FUNCIONAL, ROLE_ADMIN
/** TICKETS */
/ticket/**=ROLE_SUP_TECNICO, ROLE_OP_TECNICO, ROLE_ADMIN
/alert/**=ROLE_SUP_TECNICO, ROLE_OP_TECNICO, ROLE_ADMIN
/ticket/uploadfile=IS_AUTHENTICATED_ANONYMOUSLY
/** RISKS */
/project/**=ROLE_AN_RIESGOS, ROLE_ADMIN
/riskreport/**=ROLE_AN_RIESGOS, ROLE_ADMIN, ROLE_REPORTE_RIESGO
/** BUSINESS CONTINUITY*/
/projectpcn/**=ROLE_AN_PCN, ROLE_ADMIN
/businessuniteval/** = ROLE_AN_PCN, ROLE_ADMIN
/subprocesseval/** = ROLE_AN_PCN, ROLE_ADMIN
/failscenario/**=ROLE_AN_PCN, ROLE_ADMIN
/strategy/**=ROLE_AN_PCN, ROLE_ADMIN
/test/**=ROLE_AN_PCN, ROLE_ADMIN
/reportepcn/**=ROLE_AN_PCN, ROLE_ADMIN, ROLE_REPORTE_PCN
/process/**=ROLE_AN_PCN, ROLE_ADMIN
/** ADMIN */
/user/changeent=IS_AUTHENTICATED_REMEMBERED
/user/finduser=IS_AUTHENTICATED_REMEMBERED
/user/**=ROLE_ADMIN
/role/**=ROLE_ADMIN
/requestmap/**=ROLE_ADMIN
/empresa/**=ROLE_ADMIN
/asset/**=ROLE_ADMIN, ROLE_SUP_TECNICO, ROLE_OP_TECNICO
/responsable/**=ROLE_ADMIN
/preference/**=ROLE_ADMIN
/businessunit/**=ROLE_ADMIN, ROLE_AN_PCN
/**=IS_AUTHENTICATED_REMEMBERED
"""
useSecurityEventListener = true
onInteractiveAuthenticationSuccessEvent = { e, appCtx ->
Auditoria.log(e.getSource().getPrincipal().getDomainClass(), "Usuario autenticado - " + e.getSource().getDetails().getRemoteAddress())
}
}
嗨,在更新我的SecurityConfig.groovy
后,错误仍然存在。
但是,我已经恢复了这个日志行。我尝试使用分配了全部9个角色的用户访问/norm/index
。
DEBUG 28 / Dec / 2010 00:12:57,110 [http-8080-3]安全对象:FilterInvocation:URL:/ norm / index; ConfigAttributes:[ROLE_OP_FUNCIONAL,ROLE_ADMIN]
org.springframework.security.intercept.AbstractSecurityInterceptor - 以前经过身份验证的:org.springframework.security.providers.UsernamePasswordAuthenticationToken@a00c7ad6: 主要: com.baufest.insside.security.UserLoginDetails@0:
用户名:someuser;密码保护];启用:true; AccountNonExpired:true; credentialsNonExpired:true; AccountNonLocked:true;诚然 当局:ROLE_OP_TECNICO; 密码保护]; 认证:真实;
详情:org.springframework.security.ui.WebAuthenticationDetails@0:授权机构:ROLE_OP_TECNICO
DEBUG 28 / Dec / 2010 00:12:57,110 [HTTP-8080-3] org.springframework.security.ui.ExceptionTranslationFilter - 访问被拒绝(用户不是匿名的);委托给 AccessDeniedHandler
对于我在这里阅读的内容,我的用户似乎只获得了1个角色,即使我在调试它时,user.authorities也分配了所有9个角色。
任何想法都将不胜感激 提前谢谢。
答案 0 :(得分:0)
编辑 -
来自documentation的,requestMapString的格式应为
requestMapString = '''CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/login/**=IS_AUTHENTICATED_ANONYMOUSLY
/admin/**=ROLE_USER
/book/test/**=IS_AUTHENTICATED_FULLY
/book/**=ROLE_SUPERVISOR
'''
一些注释:
1)您在请求映射字符串中有额外的换行符和注释。 requestMapString是multiline String(查看'''一长串'''格式),因此Acegi机制将尝试解析/使用注释。