Spring Security - 如何启用方法安全注释?

2023-12-14

StackOverflow 上有很多类似的问题,但我找不到任何答案:(

我有 web.xml 像:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/spring-security.xml
    </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>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-web.xml</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<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>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

并尝试配置方法安全性带注释。据我所知,必须由以下人员完成<sec:global-method-security pre-post-annotations="enabled"/>,与其他组件放置在相同的上下文中,spring-web.xml以我为例。所以我有以下spring-web.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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/security
          http://www.springframework.org/schema/security/spring-security-3.0.xsd"
        default-autowire="byName">

    <context:component-scan base-package="com.cleanplates.apiserv"/>
    <sec:global-method-security pre-post-annotations="enabled"/>

</beans>

and spring-security.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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/security
          http://www.springframework.org/schema/security/spring-security-3.0.xsd">

    <bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy">
        <sec:filter-chain-map path-type="ant">
            <sec:filter-chain pattern="/**"
                              filters="
                                usernamePasswordProcessingFilter,
                                rememberMeFilter,
                                anonymousProcessingFilter,
                                exceptionTranslationFilter,
                                filterInvocationInterceptor"/>
        </sec:filter-chain-map>
    </bean>

    <bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
        <property name="decisionVoters">
            <list>
                <bean class="org.springframework.security.access.vote.RoleVoter"/>
            </list>
        </property>
    </bean>

    <bean id="anonymousProcessingFilter"
          class="org.springframework.security.web.authentication.AnonymousAuthenticationFilter">
        <property name="key" value="********"/>
        <property name="userAttribute">
            <bean class="org.springframework.security.core.userdetails.memory.UserAttribute">
                <property name="authoritiesAsString">
                    <list>
                        <value>ROLE_ANONYMOUS</value>
                    </list>
                </property>
                <property name="password" value="none"/>
            </bean>
        </property>
    </bean>

    <bean id="usernamePasswordProcessingFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
        <property name="filterProcessesUrl" value="/auth/password"/>
        <property name="usernameParameter" value="username"/>
        <property name="passwordParameter" value="password"/>
        <property name="authenticationManager" ref="authenticationManager"/>
    </bean>

    <bean id="rememberMeFilter" class="org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter">
        <property name="rememberMeServices" ref="rememberMeServices"/>
        <property name="authenticationManager" ref="authenticationManager" />
    </bean>

    <bean id="rememberMeServices" class="org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices">
        <property name="userDetailsService" ref="myUserDetailsService"/>
        <property name="key" value="*******"/>
        <property name="alwaysRemember" value="true"/>
    </bean>

    <bean id="rememberMeAuthenticationProvider" class="org.springframework.security.authentication.RememberMeAuthenticationProvider">
        <property name="key" value="******"/>
    </bean>

    <bean id="exceptionTranslationFilter" class="org.springframework.security.web.access.ExceptionTranslationFilter">
        <property name="authenticationEntryPoint">
            <bean class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/>
        </property>
    </bean>

    <bean id="filterInvocationInterceptor"
        class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
        <property name="authenticationManager" ref="authenticationManager"/>
        <property name="securityMetadataSource">
            <sec:filter-security-metadata-source>
              <sec:intercept-url pattern="/**" access="ROLE_ANONYMOUS,ROLE_USER" method="GET"/>
              <sec:intercept-url pattern="/**" access="ROLE_ADMIN" method="POST"/>
              <sec:intercept-url pattern="/**" access="ROLE_ADMIN" method="PUT"/>
              <sec:intercept-url pattern="/**" access="ROLE_ADMIN" method="DELETE"/>
            </sec:filter-security-metadata-source>
        </property>
        <property name="accessDecisionManager" ref="accessDecisionManager"/>
    </bean>

    <bean id="authenticationManager" class="org.springframework.security.authentication.ProviderManager">
        <property name="providers">
            <list>
                <bean class="org.springframework.security.authentication.AnonymousAuthenticationProvider">
                    <property name="key" value="***"/>
                </bean>
                <bean class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
                    <property name="saltSource">
                        <bean class="org.springframework.security.authentication.dao.ReflectionSaltSource">
                            <property name="userPropertyToUse" value="salt"/>
                        </bean>
                    </property>
                    <property name="userDetailsService" ref="myUserDetailsService"/>
                    <property name="passwordEncoder" ref="passwordEncoder"/>
                </bean>
            </list>
        </property>
    </bean>

    <bean id="myUserDetailsService" class=".UserDetailsServiceImpl">
    </bean>

    <bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.Md5PasswordEncoder">
    </bean>

</beans>

添加后出现的问题<sec:global-method-security所有控制器停止工作。我在日志中有以下内容:

PageNotFound:noHandlerFound:947 - No mapping found for HTTP request with URI [/some/page] in DispatcherServlet with name 'spring'

当我删除它时一切正常global-security元素。如果我把它添加到spring-security.xml- 没有什么变化。似乎没有使用它,因为方法注释为@PreAuthorize("hasRole('ROLE_ADMIN')")(或任何其他角色)可供任何人访问。

PS我正在使用 Spring 3.0.5.RELEASE 和 Spring Security 3.0.5.RELEASE


启用后<sec:global-method-security>spring security 为您的控制器创建代理。 spring-mvc找不到像这样的注释@RequestMapping在这种情况下,在豆上。如果你想在控制器上使用安全注释,你应该提取控制器的接口并在其上添加 mvc 注释。 Spring 文档包含以下关于此的注释:

NOTE:使用控制器接口(例如用于 AOP 代理)时,请确保一致地放置所有您的映射注释 - 例如@RequestMapping and @SessionAttributes- 在控制器接口上而不是在实现类上。

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

Spring Security - 如何启用方法安全注释? 的相关文章

  • 使用 TreeMap 和 Comparator 按值对 HashMap 进行排序

    我使用以下代码创建哈希图 然后使用树形图和比较器对哈希图中的值进行排序 然而 输出结果却出乎意料 所以任何关于我做错了什么的想法都会有帮助 Code public static void main String args System ou
  • Junit Mockito 测试一切

    我现在正在寻找更多时间但没有结果 请帮忙 这是我要测试的课程 public class DBSelectSchema extends Database private static final Logger LOG Logger getLo
  • 使用 Nginx 时缺少 HTTP 状态代码名称

    我正在使用 Nginx 将所有 HTTP 请求重定向到 HTTPS 在我的 Spring Boot 应用程序中 这是我正在使用的 nginx 配置 通过它我可以将所有请求重定向到 Https 但是当我这样做时 我得到了状态码返回正确 但没有
  • 运行单个 Java 线程的双核 CPU 利用率[重复]

    这个问题在这里已经有答案了 可能的重复 多线程 Java 应用程序能否很好地利用多核机器 https stackoverflow com questions 1649402 would a multithreaded java applic
  • 有没有办法检索有关 @Controller 定义的 spring 映射的信息?

    我希望能够创建一个页面 列出由带有注释的控制器发现的映射 Controller 我这样做是为了 REST 服务 它使我们能够轻松找到页面上实例可用的端点 到目前为止 我一直在手动执行此操作 但如果可以创建一个控制器 以一种令人愉快的格式很好
  • 具有最小刻度的图表的漂亮标签算法

    我需要手动计算图表的刻度标签和刻度范围 我知道漂亮刻度的 标准 算法 参见 我也知道这个Java实现 http erison blogspot nl 2011 07 algorithm for optimal scaling on char
  • 如何避免 Java 中的忙旋转

    我有一个多线程应用程序 其中一个线程向另一个线程发送消息 等待线程轮询消息并做出反应 处理锁 像这样 等待线程代码 while true if helloArrived System out println Got hello if bye
  • 使用 Hibernate 和 Apache DBCP 的 MySQL 连接池问题

    看来我的应用程序有问题 当应用程序在启动后闲置很长时间 我不确定确切的时间 时 我会在日志中收到以下错误消息 我使用 Spring Hibernate MySQL 和 ApacheDBCP 进行连接池 ERROR org hibernate
  • 到底什么是哈希冲突

    HashMap 中的哈希冲突或哈希冲突并不是一个新主题 我遇到过几个博客和讨论板 以模糊且详细的方式解释如何产生哈希冲突或如何避免它 我最近在一次采访中遇到了这个问题 我有很多事情要解释 但我认为很难准确地给出正确的解释 抱歉 如果我的问题
  • 竞争性编码 - 以最低成本清除所有级别:未通过所有测试用例

    当我遇到这个问题时 我正在一个竞争性编码网站上解决问题 问题指出 游戏中有 N 个关卡和 M 种可用武器 等级编号从 0 到 N 1 武器编号从 0 到 M 1 您可以按任意顺序清除这些级别 在每个关卡中 需要这些 M 武器的某些子集才能通
  • Tomcat - 多个 webapps 文件夹

    是否可以有多个文件夹来放置要部署的应用程序 这些是如何定义的 是否可以将一个文件夹限制为仅是 domain com 的应用程序 而不是其他域 Thanks 看一眼conf server xml
  • 整数与 int 比较

    我是新来的java 我现在正在学习非原始整数类型java 我知道以下比较无效并引发编译错误 String str c Char chr c if str chr return true 上面的代码片段给了我 Test java lineNu
  • Android 反向地理编码不适用于华为设备

    我正在尝试通过这段代码反转地理编码纬度 经度 Geocoder geocoder new Geocoder context Locale ENGLISH try List
  • 在 JavaFX 中更改 ListView 字体大小

    我想知道如何更改 JavaFx 中的列表视图项目文本字体大小 每行文本的大小会有所不同 我尝试使用细胞因子属性 但我不知道如何使用它 有人可以帮我吗 类似的问题在这里 如何更改JavaFX中ListView的字体大小 https stack
  • 有界通配符相关的编译器错误

    我想知道这段代码有什么问题 Map 但我试图说得更具体 这个问题在这个旧的 Apache 线程 ht
  • Java 泛型:将 Object o 的类与 进行比较

    假设我有以下课程 public class Test
  • 如何在不同的班级中启动和停止计时器?

    我想测量从传入 HTTP 请求开始到应用程序到达某个点的时间 这两个时间点都位于不同的类中 我将如何启动和停止这些不同类别的计时器 我没有看到使用 MeterRegistry 中的 命名 计时器的方法 我该怎么办呢 您可以使用 AOP 如下
  • 当通过 Map.put(K, V) 添加值时,是否必须通过 Map.get(K) 返回相同的实例?

    假设您有以下代码 Map
  • 有没有办法处理Java堆空间异常[重复]

    这个问题在这里已经有答案了 我正在寻找将文件输入流转换为大文件 文件大小为 100MB 并且抛出 java lang OutOfMemoryError Java Heap space import java io FileInputStre
  • Java 中 .NET 的 Lambda 表达式

    我最近 再次 从 C 迁移到 Java 但我非常怀念 lambda 表达式和 C 的 IEnumerable Foreach 之类的东西 所以我正在寻找Java中的lambda表达式库 有比这更好的图书馆吗LambdaJ http code

随机推荐

  • 多级动态弹出菜单

    我有以下带有纯 CSS 的弹出菜单结构 HTML ul class menu li a href Base a ul li a href Clients a ul li a href New a li li a href Edit a li
  • 如何阻止 numpy hstack 更改 opencv 中的像素值

    我正在尝试使用 opencv 在 python 中显示图像 并在其上显示侧窗格 当我使用np hstack主画面变得无法辨认的白色 只有少量的颜色 这是我的代码 img cv2 imread filename img with gt gt
  • 如何在 Visual Studio 2013 中的源代码管理下复制和重命名解决方案

    我有一个名为 ShoppingService sln 的 VS2013 解决方案 其中有 7 个项目受 TFS 源代码控制 现在我想复制该解决方案 将其重命名为 BasketService sln 并再次将其置于源代码控制之下 我不想创建原
  • 使用 PHP 和 DOTNET 类访问 Windows 注册表

    这是一个简单的问题 如何使用 PHP 和 DOTNET 类访问 Windows 注册表 我想做的是读取另一个程序写入的值 谷歌搜索并没有透露太多信息 我很感激任何答案 我找到了答案 它适用于 COM 对象 wscript new COM W
  • 将一个txt文件内容附加到另一个现有txt文件

    我正在尝试附加names txt将文件内容复制到另一个名为 as 的文件surname txt在文件末尾 不丢失以前的信息surname txt 有什么可能的方法来实现这个操作 为了执行此操作 我使用 php 以下解决方案完美运行 但数据没
  • HtmlUnit 测试失败示例

    我正在尝试通过 Junit 运行示例 HtmlUnit 测试用例 我的项目是基于 Maven 的 我是否需要将编译和测试下列出的所有依赖项添加到我的 POM 中 http htmlunit sourceforge net dependenc
  • android grafika ContinuousCapture 活动问题

    我正在使用 android grafika 进行视频录制 我将更改我想要的所有内容 一切都很完美 只有2个问题 如果我在 7 秒 例如 2 秒或低于 7 秒 后保存视频 那么它会保存 7 秒的视频 如果我拍摄的视频时长为 15 秒或更长时间
  • 在画布上绘制路径作为动画

    我必须再问一次 因为之前没有人回答我的问题 我的问题不是重复的如何在 Android 画布上用动画绘制路径 请仔细阅读并帮助我 如果可能的话 提供代码 上面的例子对我来说不清楚 路径是在绘图流程上创建的 这不是我要找的 我想绘制一条已存在于
  • Java 中的类型擦除

    类型擦除应该擦除所有通用信息 如果是这种情况 像 GSON 这样的库如何使用泛型来确定反序列化为什么类型 e g private Map
  • 将动力学函数应用于相空间中的每个点(由二维矩阵表示)

    我有一个整数矩阵 phase space形状的 n n 其中每个条目代表空间中该位置的点数 我还有两个更新矩阵u x u y也有形状 n n 整数在范围内0 n指定我的动力系统在空间中的每个对应点的位置 我想迭代地将更新矩阵 应用 到相空间
  • 如何使用 Ruby 将阿拉伯/波斯数字翻译成英语?

    如何将一些具有阿拉伯 波斯数字的字符串转换为英语 就像如果我有 str1 str2 12 str3 some string that contains persian digits like 是否有任何函数将其编码为英语 如果字符串包含这样
  • 调用局部视图

    我有一个渲染两个下拉列表的视图 下拉列表的控制器工作正常 他们调用存储库类中的方法来进行数据库选择 在下拉列表下方 我尝试在部分视图中呈现数据表 以响应下拉列表选择 视图中的下拉菜单使用单个模型 model BudgetDemo Model
  • 将数据表中的行选择限制为 3

    我目前正在使用 jQuery 数据表插件 想知道是否有任何方法可以将行选择限制为 3 现在用户可以选择无限数量的行 这是我的代码的 jsfiddle http jsfiddle net EfFA2 JS document ready fun
  • Ingress 与负载均衡器

    我对 Kubernetes 中 Ingress 和 Load Balancer 的角色很困惑 据我了解 Ingress 用于将来自互联网的传入流量映射到集群中运行的服务 负载均衡器的作用是将流量转发到主机 在这方面 ingress 与负载均
  • 如何在 SVG 中不缩放图像

    所以我有一个 SVG 图像 如下所示
  • Vuetify,如何设置默认道具

    我已经开始使用 Vuetify 但我正在寻找一种修改某些组件上的默认 props 的方法 有没有办法做到这一点 即不必不断地写
  • “]”附近的语法不正确。?

    我已经对我的 sql 进行了一些调试 但我无法弄清楚我遇到的令人抓狂的错误 我已将其缩小到几行 我看不出问题是什么 请有人给我一些帮助 我收到这个错误 我在这里2 消息 102 第 15 级 状态 1 第 1 行 附近语法不正确 我在这里3
  • 如何将 Font Awesome 图标添加到输入字段?

    如何使用 Font Awesome 中包含的搜索图标进行输入 我的网站上有一个搜索功能 基于 PHPmotion 我想将其用于搜索 这是代码 div div
  • Java Restful服务eclipse tomcat HTTP错误404

    我尝试跟上 java 休息服务 所以我找到了一些教程 它们的解释总是相同的 但我无法让它运行 我在eclipse中制作了2 5版本的Dynamic Web Project和Tomcat 7 0 然后我将以下 jar 加载到 WEB INF
  • Spring Security - 如何启用方法安全注释?

    StackOverflow 上有很多类似的问题 但我找不到任何答案 我有 web xml 像