【问题标题】:Spring security hasRole() giving Error 403 - Access is deniedSpring security hasRole() 给出错误 403 - 访问被拒绝
【发布时间】:2023-03-16 22:15:01
【问题描述】:

我正在尝试查看只有管理员才能查看的特定页面,但每次我提出请求时都会收到错误消息。它似乎与我的安全上下文文件中的 hasRole() 有关。

错误只是说 HTTP 状态 403 - 当我请求查看管理 jsp 页面时访问被拒绝

安全上下文.xml:

<security:http use-expressions="true">
    <security:intercept-url pattern="/admin" access="hasAnyRole('admin')" />
    <security:form-login login-page="/login"
        authentication-failure-url="/login?error=true" />
    <security:logout logout-success-url="/loogedout" />
    <security:intercept-url pattern="/createoffer" access="isAuthenticated()" />
    <security:intercept-url pattern="/docreate" access="isAuthenticated()" />
    <security:intercept-url pattern="/offercreated" access="isAuthenticated()" />
    <security:intercept-url pattern="/" access="permitAll" />
    <security:intercept-url pattern="/loggedout" access="permitAll" />
    <security:intercept-url pattern="/newaccount" access="permitAll" />
    <security:intercept-url pattern="/createaccount" access="permitAll" />
    <security:intercept-url pattern="/accountcreated" access="permitAll" />
    <security:intercept-url pattern="/static/**" access="permitAll" />
    <security:intercept-url pattern="/login" access="permitAll" />
    <security:intercept-url pattern="/offers" access="permitAll" />
    <security:intercept-url pattern="/**" access="denyAll" />
</security:http>

我的数据库中的两个表是用户(用户名、电子邮件、启用、密码)和权限(用户名、权限)。

谁能建议我的错误是什么或如何解决?

【问题讨论】:

  • 你能把详细的错误信息贴出来吗,没有它对你没有多大帮助。
  • @JasonZ 抱歉,我已经编辑了错误的帖子。
  • 您是否以admin 登录?
  • @JasonZ 是的,以管理员身份登录,我可以执行所有其他任务。
  • @您要访问的URL 是什么?是/admin吗?

标签: java spring jsp spring-mvc spring-security


【解决方案1】:

请确认当您以管理员身份登录时,您确实拥有管理员角色。 请查看以下代码的输出:
getCurrentUser().getAuthorities(); 在允许所有人的任何流程中。 这将简单地列出您登录用户拥有的所有角色。

public UserInfo getCurrentUser() {
        UserInfo userInfo = null;
        SecurityContext securityContext = SecurityContextHolder.getContext();
        if (securityContext != null && null != securityContext.getAuthentication()) {
            Object principal = securityContext.getAuthentication().getPrincipal();
            if (UserInfo.class.isAssignableFrom(principal.getClass())) {
                userInfo = (UserInfo) principal;
            }
        }
        return userInfo;
    }

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2017-01-10
      • 1970-01-01
      • 2015-12-03
      • 2012-02-15
      • 1970-01-01
      • 2018-04-23
      • 2020-01-25
      • 2015-11-13
      • 2018-03-20
      相关资源
      最近更新 更多