当前位置: 首页 > 知识库问答 >
问题:

Spring Security性-ACL。用户不接收权限

赫连心思
2023-03-14

好像没事。授权正在工作,用户获得角色。我保护了使用注释的方法(例如@preauthorize(“haspermission(#post,'read')”)),它可以工作,但我的访问被拒绝。我创建了一个数据库,他在其中描述了用户对对象的权限。我创建了一个数据库,其中包含用户对对象的权限。

我的问题是,在用户授权之后,它没有获得权限,而且即使用户有权反对,他也会被拒绝访问。另外,我注意到用户登录后,在服务器的日志文件中应该得到一个字符串,它将写出他得到的权限,但我没有这样的行。

我得文件片段:

web.xml

...
<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/acl-context.xml
        /WEB-INF/mvc-dispatcher-servlet.xml 
    </param-value>
</context-param>...
    ...
<security:global-method-security pre-post-annotations="enabled">
    <security:expression-handler ref="expressionHandler" />
</security:global-method-security>

<context:annotation-config />

<tx:annotation-driven />
<tx:jta-transaction-manager />

<context:component-scan base-package="com.bla-bla.bla.controllers" />

<mvc:annotation-driven />
...
    ...
<security:http auto-config="true" use-expressions="true"
    access-denied-page="/auth/denied.html">
    <security:intercept-url pattern="/auth/login.html" access="permitAll" />
    <security:form-login login-page="/auth/login.html"
        authentication-failure-url="/auth/login.html?error=true"
        default-target-url="/index.html" />
    <security:logout invalidate-session="true"
        logout-success-url="/auth/login.html" logout-url="/auth/logout.html" />
</security:http>

<security:authentication-manager>
    <security:authentication-provider
        user-service-ref="userService">
        <security:password-encoder ref="pswEncoder" />
    </security:authentication-provider>
</security:authentication-manager>

<bean id="userService"
    class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
    <property name="dataSource" ref="jndiJboss" />
    <property name="usersByUsernameQuery"
        value="SELECT login, pass, enabled FROM accounts WHERE login=?" />
    <property name="authoritiesByUsernameQuery"
        value="SELECT login, authority FROM accounts WHERE login=?" />
</bean>

<bean
    class="org.springframework.security.authentication.encoding.Md5PasswordEncoder"
    id="pswEncoder" />
...
    ...
<bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler"
    p:permissionEvaluator-ref="permissionEvaluator"
    p:roleHierarchy-ref="roleHierarchy" />

<bean class="org.springframework.security.acls.AclPermissionEvaluator" id="permissionEvaluator">
    <constructor-arg ref="aclService"/>
</bean>

<bean class="org.springframework.security.acls.jdbc.JdbcMutableAclService" id="aclService">
    <constructor-arg ref="jndiJboss"/>
    <constructor-arg ref="lookupStrategy"/>
    <constructor-arg ref="aclCache"/>
</bean>

<bean id="lookupStrategy" class="org.springframework.security.acls.jdbc.BasicLookupStrategy">
    <constructor-arg ref="jndiJboss"/>
    <constructor-arg ref="aclCache"/>
    <constructor-arg ref="aclAuthorizationStrategy"/>
    <constructor-arg ref="auditLogger"/>
</bean>

 <bean id="jndiJboss" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:/JBossDB"/>
</bean>

<bean id="aclCache" class="org.springframework.security.acls.domain.EhCacheBasedAclCache">
    <constructor-arg>
        <bean class="org.springframework.cache.ehcache.EhCacheFactoryBean">
            <property name="cacheManager">
                <bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>
            </property>
            <property name="cacheName" value="aclCache"/>
        </bean>
    </constructor-arg>
</bean>

<bean id="aclAuthorizationStrategy" class="org.springframework.security.acls.domain.AclAuthorizationStrategyImpl">
    <constructor-arg>
        <list>
            <bean class="org.springframework.security.core.authority.GrantedAuthorityImpl">
                <constructor-arg value="ROLE_ADMIN"/>
            </bean>
            <bean class="org.springframework.security.core.authority.GrantedAuthorityImpl">
                <constructor-arg value="ROLE_ADMIN"/>
            </bean>
            <bean class="org.springframework.security.core.authority.GrantedAuthorityImpl">
                <constructor-arg value="ROLE_ADMIN"/>
            </bean>
        </list>
    </constructor-arg>
</bean>

<bean id="auditLogger" class="org.springframework.security.acls.domain.ConsoleAuditLogger"/>


<bean id="roleHierarchy"  class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl">
    <property name="hierarchy">
        <value>
            ROLE_ADMIN > ROLE_USER
        </value>
    </property>
</bean>
...
@Override
@RequestMapping(value = "/post/delete.html", method = RequestMethod.GET)
@Transactional
@PreAuthorize("hasPermission(#post, 'READ')")
public String delete(final Post post) {
    //some actions
    return "post/view";
}

UPD.我的问题是填写错误的acl_object_identity

共有1个答案

程举
2023-03-14

发布使用ACL(安全方法调用)的代码,并在Spring配置文件中突出显示这些类。另外,为什么要在MVC配置文件中放置 元素?

 类似资料:
  • 我正在使用PostMan客户端测试我的Spring Security应用程序。当我更改密码和更新请求并激发请求时,我没有得到401错误。Spring security不调用UserDetailsService。只有当我将用户名更改为某个错误的用户名时,UserDetailsService才会被调用,并且我开始看到预期的结果。这可能是一个安全问题。我是不是漏掉了什么。

  • 我不是Spring4的新手,但我是SpringSecurity4ACL的新手。我刚刚在我的MVC Web应用程序上实现了Spring Security4,这些应用程序都是后端Web服务。这里贴出了我所做的事情的链接: 这为我的URL增加了安全性,只有具有特定角色的用户才能请求URL。这太棒了!我们以SiteMinder为例,不是传回一个用户名,而是在请求头中传回一个令牌。我们调用OpenAM,传入

  • 一、前言 为了避免存储在 Zookeeper 上的数据被其他程序或者人为误修改,Zookeeper 提供了 ACL(Access Control Lists) 进行权限控制。只有拥有对应权限的用户才可以对节点进行增删改查等操作。下文分别介绍使用原生的 Shell 命令和 Apache Curator 客户端进行权限设置。 二、使用Shell进行权限管理 2.1 设置与查看权限 想要给某个节点设置权

  • 本文向大家介绍Springboot+SpringSecurity+JWT实现用户登录和权限认证示例,包括了Springboot+SpringSecurity+JWT实现用户登录和权限认证示例的使用技巧和注意事项,需要的朋友参考一下 如今,互联网项目对于安全的要求越来越严格,这就是对后端开发提出了更多的要求,目前比较成熟的几种大家比较熟悉的模式,像RBAC 基于角色权限的验证,shiro框架专门用于

  • zookeeper 的 ACL(Access Control List,访问控制表)权限在生产环境是特别重要的,所以本章节特别介绍一下。 ACL 权限可以针对节点设置相关读写等权限,保障数据安全性。 permissions 可以指定不同的权限范围及角色。 ACL 命令行 getAcl 命令:获取某个节点的 acl 权限信息。 setAcl 命令:设置某个节点的 acl 权限信息。 addauth

  • 我试图用spring security ACL强制执行一个新的应用程序,经过一些阅读后,我对每个ACE的权限都有问题。我希望,如果主体对域对象实例具有管理权限(16),则能够访问具有以下注释的方法: 但是 它似乎起作用了。 所以,我的问题是:这些权限不是分层的吗? 我的意思是,为什么我必须对一个具有读取权限的方法显式指定admin权限?admin不是比read“大”吗? 我在想,如果我授予用户ad