弹簧安全返回 403,日志记录不起作用
Posted
技术标签:
【中文标题】弹簧安全返回 403,日志记录不起作用【英文标题】:spring security return 403, logging not working 【发布时间】:2017-06-01 18:40:20 【问题描述】:我无法让 Spring Security 工作。我用security:user-service
测试了我的应用程序,它运行良好。但是,当我更换
<security:user-service>
<security:user name="XX" password="XX" authorities="ROLE_EDITOR" />
</security:user-service>
与
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider>
<security:jdbc-user-service data-source-ref="dataSource"
users-by-username-query="SELECT name as username, password, 1 as enabled FROM cuser WHERE name=?;"
authorities-by-username-query="SELECT u.name as username, r.name as authority FROM cuser u join cuserrole ur on ur.iduser=u.id join crole r on r.id=ur.idrole where u.name=?;" />
</security:authentication-provider>
</security:authentication-manager>
我不能再让它工作了。不断收到来自服务器的 403 响应。我在我的数据库上运行了查询,它们返回了预期值。
我也无法使日志记录工作,所以我发现很难调试幕后真正发生的事情。 我确实在 SO 上阅读过类似的问题
How do I enable logging for Spring Security?
Debugging Spring configuration
尝试了解决方案,但日志仍然不起作用。如果有人有任何想法,您的帮助将不胜感激。
【问题讨论】:
【参考方案1】:不敢相信..
Spring 需要 ROLE_ 前缀才能安全工作。因此我得到 403。
【讨论】:
有人能告诉我为什么 ROLE_ 前缀吗?谢谢 我不能使用我手工制作的角色名称吗?【参考方案2】:RoleVoter 类有一个属性 rolePrefix
的设置器
public class RoleVoter implements AccessDecisionVoter<Object>
// ~ Instance fields
// ================================================================================================
private String rolePrefix = "ROLE_";
// ~ Methods
// ========================================================================================================
public String getRolePrefix()
return rolePrefix;
/**
* Allows the default role prefix of <code>ROLE_</code> to be overridden. May be set
* to an empty value, although this is usually not desirable.
*
* @param rolePrefix the new prefix
*/
public void setRolePrefix(String rolePrefix)
this.rolePrefix = rolePrefix;
所以您可以在 RoleVoter 中设置此属性,然后设置到 AccessDecissionManager 并将其配置为 spring security http 配置中的 access-decission-manager-ref
【讨论】:
以上是关于弹簧安全返回 403,日志记录不起作用的主要内容,如果未能解决你的问题,请参考以下文章