【问题标题】:Spring security not authorizing userSpring Security 未授权用户
【发布时间】:2015-10-21 07:43:42
【问题描述】:

我是 Spring Security 的新手,我正在开发一个需要使用 Spring Security 3.2 进行身份验证和授权的 Web 应用程序,身份验证部分工作正常,但授权不是。下面是我的spring安全配置xml sn-p。

<authentication-manager>
    <authentication-provider>
        <password-encoder ref="encoder" />
        <jdbc-user-service data-source-ref="myDataSource"
            users-by-username-query=" SELECT email_address as username , password, enabled FROM users WHERE email_address = ?   "
            authorities-by-username-query=" SELECT u.email_address as username , 
                                            r.role_name FROM users u
                                            INNER JOIN user_roles ur
                                            ON ur.user_id = u.user_id
                                            INNER JOIN roles r
                                            ON r.role_id = ur.role_id
                                            WHERE u.email_address = ? "/>
    </authentication-provider>
</authentication-manager>

<beans:bean id="encoder"
    class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
    <beans:constructor-arg name="strength" value="11" />
</beans:bean>

<http pattern="/resources/**" security="none" />

<http auto-config="true" use-expressions="true" create-session="ifRequired">

    <form-login login-page="/" default-target-url="/admin/dashboard"
        authentication-failure-url="/login-error" always-use-default-target="true" />

    <!-- Security zones -->
    <intercept-url pattern="/" access="isAnonymous()" />
    <intercept-url pattern="/admin*" access="hasRole('ROLE_ADMIN')" />

    <session-management invalid-session-url="/"
        session-fixation-protection="newSession">
        <concurrency-control max-sessions="1"
            error-if-maximum-exceeded="true" />
    </session-management>

    <logout logout-success-url="/" delete-cookies="JSESSIONID"
        invalidate-session="true" />

    <access-denied-handler error-page="/403" />
</http>

使用此配置,除了授权之外,一切都可以正常工作。我有两个用户,即 tim@abc.com (role=ADMIN)bob@abc.com(role=USER),但是当我尝试使用 登录时>bob@abc.com 然后我也可以查看不应该发生的 admin/dashboard 页面。

我也参考了许多教程和 spring 文档,但无法找到确切的问题。请帮忙。

【问题讨论】:

  • 登录后如果你再次使用bob@abc.com点击/admin/dashboard url,你就可以加载页面了吗?
  • 是的,这很奇怪。
  • 你能不能把这个default-target-url="/admin/dashboard"改成别的,然后再试试/admin/dashboard url。

标签: java spring spring-mvc spring-security


【解决方案1】:

将模式改为“/admin/*”

&lt;intercept-url access="hasRole('ROLE_ADMIN')" /&gt;

您的 default-target-url="/admin/dashboard" 似乎令人困惑,因为它会在登录后重定向到 /admin/dashboard 的每个用户。当您使用 bob@abc.com 登录时,您可能会收到 http UnAuthorized 响应。

【讨论】:

  • 是的,这就是问题所在,当我尝试使用 bob 登录时,它不会抛出 403。
  • 将模式更新为 /admin/* 并将角色更改为“ROLE”解决了我的问题,非常感谢@Abhinay :)
猜你喜欢
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 2013-05-18
  • 2020-07-28
  • 2020-06-01
  • 1970-01-01
相关资源
最近更新 更多