Spring Security 不会在拦截 URL 上重定向

2023-12-22

我的 spring-security.xml 有两个问题

  1. 当我在其中扮演多个角色时access="ROLE_ADMIN,ROLE_EMPLOYEE"
    我得到了例外:Caused by: java.lang.IllegalArgumentException: Failed to parse expression 'ROLE_ADMIN,ROLE_EMPLOYEE'
    但如果我有一个角色:access="ROLE_ADMIN"它会工作得很好

  2. 如果我直接降落在/Management/main/admin我不会被规则重定向:security:form-login login-page="/Management/auth/login/",这意味着我可以在没有管理员角色的情况下进入应用程序。

这是我的 spring-security.xml

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

    <sec:global-method-security secured-annotations="enabled"  jsr250-annotations="enabled" />
    <sec:http auto-config="true" use-expressions="true"
        access-denied-page="/Management/auth/denied">

        <sec:intercept-url pattern="/Management/auth/login" filters="none" access="permitAll"/>
        <sec:intercept-url pattern="/Management/main/admin" filters="none" access="ROLE_ADMIN,ROLE_EMPLOYEE" />
        <sec:intercept-url pattern="/Management/api/affiliates/**" filters="none" access="ROLE_ADMIN,ROLE_EMPLOYEE" />

        <sec:form-login  login-page="/Management/auth/login/"
             authentication-success-handler-ref="loginAuthenticationSuccessHandler"
            authentication-failure-url="/Management/auth/login?error=true"
            login-processing-url="/Management/auth/j_spring_security_check"
            default-target-url="/Management/auth/login?error=false" />
        <sec:logout invalidate-session="true"
            logout-success-url="/Management/auth/login/" logout-url="/Management/auth/logout" />
    </sec:http>

    <sec:authentication-manager>
        <sec:authentication-provider
            user-service-ref="customUserDetailsService">
            <sec:password-encoder ref="passwordEncoder" />
        </sec:authentication-provider>
    </sec:authentication-manager>
    <bean id="loginAuthenticationSuccessHandler" class="com.affiliates.server.security.LoginAuthenticationSuccessHandler">
        <property name="defaultTargetUrl" value="/Management/auth/login?error=false"/>
    </bean>


    <bean
        class="org.springframework.security.authentication.encoding.Md5PasswordEncoder"
        id="passwordEncoder" />
    <bean id="customUserDetailsService" class="com.affiliates.service.CustomUserDetailsService" />
</beans>

这是我的 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
        /WEB-INF/spring-security.xml
        /WEB-INF/applicationContext.xml
        </param-value>
    </context-param>
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/classes/log4j-myapp.properties</param-value>
    </context-param>
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/Management/*</url-pattern>
    </servlet-mapping>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

你正在使用使用表达式=true

您必须在拦截 URL 中使用 SpEL,如下所示:

 <security:http auto-config="true" use-expressions="true" access-denied-page="/krams/auth/denied" >

  <security:intercept-url pattern="/krams/auth/login" access="permitAll"/>
  <security:intercept-url pattern="/krams/main/admin" access="hasRole('ROLE_ADMIN')"/>
  <security:intercept-url pattern="/krams/main/common" access="hasRole('ROLE_USER')"/>

  ....
 </security:http>

要查看实际效果,请访问以下教程:http://krams915.blogspot.com/2010/12/spring-security-3-mvc-using-simple-user.html http://krams915.blogspot.com/2010/12/spring-security-3-mvc-using-simple-user.html

您可能还想查看一些有关本机表达式的信息:http://krams915.blogspot.com/2010/12/spring-security-3-mvc-using-native.html http://krams915.blogspot.com/2010/12/spring-security-3-mvc-using-native.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Security 不会在拦截 URL 上重定向 的相关文章

随机推荐

  • 数据库设计中的多对多关系

    我目前有一个数据库 其中有两个表 分别称为 Articles 和 Tags 为了允许文章属于多个类别 我有多对多的关系 这样的设计从性能上来说是不是一个错误呢 或者我应该删除这两个表之间的关系并添加第三个表作为桥梁 articlesTags
  • 如何在单击按钮时通过动画显示视图?

    我是编码新手 我正在制作一个应用程序 我需要在单击按钮时显示一个视图 并且该视图应该看起来像是来自按钮本身 再次单击该按钮时 视图应返回到按钮 动画 我有翻转 卷曲等动画 但我不知道该怎么做 这是一个简单的例子 放showView 作为按钮
  • 如何访问django项目之外的目录文件?

    我的 Django 项目在 RHEL 7 操作系统上运行 项目在路径中 root project 项目托管在 httpd 服务器上 现在我正在尝试访问目录之外的文件 例如 root data info test txt 我应该如何访问vie
  • 如何在 JSF 2 中创建自定义转换器?

    我有一个名为 操作 的实体 Entity Table name operation public class Operation implements Serializable private static final long seria
  • 如何获得值的二进制表示形式[重复]

    这个问题在这里已经有答案了 可能的重复 C 中十进制到二进制的转换 https stackoverflow com questions 2954962 decimal to binary conversion in c 我有 3 432 1
  • site.css 不适用于我的示例网站

    这里是新手 我在 VS2010 中创建了一个空的 MVC 项目 并且正在尝试格式化我的视图以进行身份 验证 所以 我将其添加到 site css 中 rez color Olive 我的看法是 using Html BeginForm di
  • Django 静态文件(css)不起作用

    由于某种原因 我似乎无法包含我的引导 css 文件 我对 Python 和 Django 特别陌生 所以我肯定做错了什么 姜戈 1 9 2 读完后Django 官方解释 https docs djangoproject com en 1 9
  • Bootstrap:如何将按钮放置在输入组旁边

    我无法弄清楚 符合 正确的引导 如何让按钮位于 div 内的输入组旁边 它们需要居中对齐 这就是我想要的样子 这就是正在发生的事情 这是我当前的代码 div div div div
  • Boost变体apply_visitor编译错误

    这个简单的 boost variant 和 boost apply visitor 示例代码 include
  • 为什么通过实例调用静态方法不会给 Java 编译器带来错误?

    我相信你们都知道我的意思 代码例如 Thread thread new Thread int activeCount thread activeCount 引发编译器警告 为什么不是错误呢 EDIT 需要明确的是 问题与线程无关 我意识到在
  • 在 PHP 中实例化类的正确方法

    我正在尝试在类内创建一个方法 它将实例化当前所在的类 但我还需要此方法才能在所有扩展类中正常工作 据我所知这个线程 https stackoverflow com questions 5197300 new self vs new stat
  • Elasticsearch:可以进行批量搜索吗?

    我知道支持批量索引操作 但是否可以对搜索查询执行相同的操作 我想发送许多不同的不相关的查询 进行精度 召回测试 使用批量查询可能会更快 是的 您可以使用多搜索API https www elastic co guide en elastic
  • javascript:使用一个回调执行一堆异步方法

    我需要执行一堆异步方法 客户端 SQLite 数据库 并且仅调用一个最终回调 当然 最丑陋的方式是 execAll function callBack asynch1 function asynch2 function asynchN fu
  • Winforms DataGridView 数据绑定到复杂类型/嵌套属性

    我正在尝试数据绑定DataGridView包含具有以下结构的类的列表 MyClass SubClass Property 当我单步执行代码时 SubClass从未被要求 我没有收到任何错误 只是没有看到任何数据 请注意 我可以在具有相同层次
  • 用数字编织奇怪的失控行为

    我对数字有奇怪的行为 在某些块中 knitr 从单个绘图函数生成两个图形 并且从 chunkname 生成的图形被命名为 chunkname1 pdf 和 chunkname2 pdf 有时 第一个只是与第二个大小相同的空白图形 有时它是一
  • 正则表达式获取特定匹配单词后的单词

    我正在尝试从一些发票中提取美元金额 我需要准确无误地匹配紧接着 总计 这个词 此外 总计 一词有时可能会在其后出现一个冒号 即Total 示例文本示例如下所示 4 发现信用购买 c REF 02353R 总计 40 00AID 1523Q1
  • 如何在 Visual Studio 2015 中使用 MSBuild 在构建上部署 ASP.NET MVC 应用程序?

    我希望在构建项目时将应用程序部署到本地文件夹 这应该会生成一个 zip 文件 我可以用它导入到 IIS 中 我怎样才能实现这个目标 命令行 msbuild yoursolutionfile sln p DeployOnBuild true
  • 如何删除标准 iframe Facebook Like 按钮的“成为第一个喜欢这个的朋友”部分?

    我正在使用标准的 Facebook Like 按钮 iframe 而不是 fbml 有没有办法只显示 喜欢 按钮 而不显示 成为第一个喜欢这个的朋友 部分 目前这是不可配置的 如果您使用button count布局 那么您将看不到该文本
  • 如何在多个列表中找到共同元素?

    我有一个列表列表 嵌套列表 我需要找到它们之间的共同点 Example would be 1 3 5 1 6 7 9 3 1 3 10 11 应该导致 1 3 如果不使用HashSet的retainAll方法 如何迭代所有元素来查找 Tha
  • Spring Security 不会在拦截 URL 上重定向

    我的 spring security xml 有两个问题 当我在其中扮演多个角色时access ROLE ADMIN ROLE EMPLOYEE 我得到了例外 Caused by java lang IllegalArgumentExcep