Spring Security sec:授权抛出异常

Posted

技术标签:

【中文标题】Spring Security sec:授权抛出异常【英文标题】:Spring Security sec:authorize throw exception 【发布时间】:2016-03-14 19:57:53 【问题描述】:

我想在我的 jsp 中添加一个仅向管理员显示的字段。为此,我使用标签 sec:authorize access="hasRole('Admin')"。但是当我添加它时,应用程序抛出异常:http://pastebin.com/TcN0k0K0 我使用 spring 4.1.7.RELEASE,spring-security 版本 4.0.3.RELEASE。在 pom.xml 我添加了 spring-security-taglibs v.4.0.3 这是我的jsp代码:

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<html>
<body>    
<sec:authorize access="hasRole('Admin')">
    <p>Must have ROLE_Admin to see this</p>
</sec:authorize>    
<form name='registerForm' method='POST' action="/admin/createuser">
        ...

在存储为 ROLE_Admin、ROLE_User 的数据库角色中 spring-security.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:security="http://www.springframework.org/schema/security"
             xsi:schemaLocation="http://www.springframework.org/schema/security

     http://www.springframework.org/schema/security/spring-security-4.0.xsd
     http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">

<http use-expressions="true" >
    <csrf disabled="true"/>
    <intercept-url pattern="/admin" access="hasAnyRole('Admin', 'User')" />
    <intercept-url pattern="/" access="permitAll" />
    <intercept-url pattern="/login" access="permitAll" />
    <intercept-url pattern="/logout" access="permitAll" />

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

    <form-login login-page='/login' login-processing-url="/login" authentication-failure-url="/403"
                default-target-url="/admin"
                username-parameter="login" password-parameter="password" />
    <logout logout-url="/logout" logout-success-url="/logoutSuccessful" delete-cookies="JSESSIONID" invalidate-session="true" />
</http>

<authentication-manager>
    <authentication-provider>
        <jdbc-user-service data-source-ref="myDataSource"
                           users-by-username-query= "select login, password, 'true' from employee where login=?"
                           authorities-by-username-query= "select login, role from employee where login =?  " />
    </authentication-provider>
</authentication-manager>

<beans:import resource="data-source-cfg.xml"/>
</beans:beans>

如何解决这个问题?

【问题讨论】:

【参考方案1】:

看看这个post,你遇到的问题是关于春季版本的。你有两个选择:

1 - 要继续使用 spring security 4.0.3,您必须升级 Spring 4.2.x 版本。

2 - 要继续使用当前的 spring 版本,您必须降级到 Spring security 4.0.2

最好的问候

【讨论】:

我刚刚试过并看到了你的帖子)。适用于 spring-security 4.0.1.release

以上是关于Spring Security sec:授权抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Security thymeleaf sec 中使用列表:授权标签

Spring Boot Security - Thymeleaf sec:授权不起作用

使用 AngularJS 登录后不存在授权标头时,Spring Security 不会抛出错误

Spring Security应用开发(19)基于方法的授权AOP

Spring Security 授权标签 - HTTP 状态 500

Reactive-Spring-Security-5.1.3.RELEASE,多重授权