怎样进行spring acegi URL权限配置

believefym 2009-09-01 01:05:52
意思就是只有具有相应权限的用户才能打开相应的url, 这个应该怎么配置,哪位能给个例子?

下面的代码能不能做到访问/writeAction.do的时候要求具有ROLE_WRITER?能不能给分析一下
[Quote=]
com.xxx.WriteAction.execute=ROLE_WRITER
[/Quote]



<bean id="methodDefinitionSourceAdvisor"
class="org.acegisecurity.intercept.method.aopalliance.MethodDefinitionSourceAdvisor">
<constructor-arg>
<bean
class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor">
<property name="authenticationManager">
<ref bean="authenticationManager" />
</property>
<property name="accessDecisionManager">
<ref bean="methodAccessDecisionManager" />
</property>
<property name="objectDefinitionSource">
<value> com.xxx.WriteAction.execute=ROLE_WRITER

</value>
</property>
</bean>
</constructor-arg>
</bean>
...全文
345 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
believefym 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 believefym 的回复:]
再问一下,URL的权限控制,如何处理需要role组合的情况
比如
/a.jsp=ROLE_A,ROLE_B
这样是ROLE_A或ROLE_B都可以访问,我如何使得同时具有ROLE_A和ROLE_B才能访问
[/Quote]

没人看看这个么?
believefym 2009-09-16
  • 打赏
  • 举报
回复
再问一下,URL的权限控制,如何处理需要role组合的情况
比如
/a.jsp=ROLE_A,ROLE_B
这样是ROLE_A或ROLE_B都可以访问,我如何使得同时具有ROLE_A和ROLE_B才能访问
accessmanager88 2009-09-09
  • 打赏
  • 举报
回复
进行URL拦截哪有这么复杂啊。安装一个在web.xml里面安装一个filter就搞定了。没有这么多烦恼。

参考:http://www.blogjava.net/Metadmin/archive/2009/06/16/282612.html 《玩转细粒度权限管理》 二,登录及URL拦截
APOLLO_TS 2009-09-08
  • 打赏
  • 举报
回复
spring acegi URL 感觉配置太麻烦--不如自己写方法:

--链接导向表T_URL_FORWARD
CREATE TABLE IF NOT EXISTS T_URL_FORWARD(
UF_ID INTEGER NOT NULL AUTO_INCREMENT COMMENT 'ID',
ROLE_ID int(4) NOT NULL COMMENT '角色ID',
PRG_SUB_NAME varchar(20) NOT NULL COMMENT '子项目名',
TASK_DEF_ID bigint(20) COMMENT '任务定义ID',
KEY_NAME varchar(50) NULL COMMENT '导向关键字',
URL varchar(100) NOT NULL COMMENT '链接导向',
PRIMARY KEY (UF_ID),
UNIQUE KEY (ROLE_ID,TASK_DEF_ID)
)

然后你参考那个过滤器使用反射方式,不同用户不同链接。到时候你用内存数据库什么的,比用
acegi 快的不是一点半点。spring实在太臃肿。
行云边 2009-09-08
  • 打赏
  • 举报
回复
我帖子太冷清了 来插个广告 关于spring的讨论。 顺便帮楼主顶一下

关于spring的讨论
believefym 2009-09-08
  • 打赏
  • 举报
回复
[Quote=]
在authenticationProcessingFilter中加入如下属性:
<property name="exceptionMappings">
  <props>
    <prop key="org.acegisecurity.BadCredentialsException">/XXX.jsp </prop>
    <prop key="org.acegisecurity.DisabledException">/YYY.jsp </prop>
  </props>
</property>
[/Quote]

能不能为不同的页面定制不同的无权限后的跳转页面
比如, 没有相应的权限访问a.jsp后跳转到a_error.jsp,
访问b.jsp后跳转到b_error.jsp,

而不是像上面配置文件那样统一跳转到XXX.jsp
vampireallen 2009-09-07
  • 打赏
  • 举报
回复
1.一般来讲acegi的权限限制都是靠正则表达式来限制的,例如

<bean id="filterInvocationInterceptor"
class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
<property name="authenticationManager">
<ref local="authenticationManager" />
</property>
<property name="accessDecisionManager">
<ref local="httpRequestAccessDecisionManager" />
</property>
<property name="objectDefinitionSource">
<value>
<![CDATA[
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
\A/welcome/.*\Z=Anonymous,Authenticated
\A/public/.*\Z=Anonymous,Authenticated
\A/login.*\Z=Anonymous,Authenticated
\A/ping/alive.gif.*\Z=Anonymous,Authenticated
\A/j_acegi_security_check.*\Z=Anonymous,Authenticated
\A/getmondrianmodel.*\Z=Anonymous,Authenticated
\A/getimage.*\Z=Anonymous,Authenticated
\A/getresource.*\Z=Anonymous,Authenticated
\A/admin.*\Z=Admin
\A/auditreport.*\Z=Admin
\A/auditreportlist.*\Z=Admin
\A/versioncontrol.*\Z=Admin
\A/propertieseditor.*\Z=Admin
\A/propertiespanel.*\Z=Admin
\A/subscriptionadmin.*\Z=Admin
\A/resetrepository.*\Z=Admin
\A/viewaction.*solution.admin.*\Z=Admin
\A/scheduleradmin.*\Z=Admin
\A/publish.*\Z=Admin
\A/logout.*\Z=Anonymous
\A/.*\Z=Authenticated
]]>
</value>
</property>
</bean>


像你的那个就可以写成

<bean id="filterInvocationInterceptor"
class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
<property name="authenticationManager">
<ref local="authenticationManager" />
</property>
<property name="accessDecisionManager">
<ref local="httpRequestAccessDecisionManager" />
</property>
<property name="objectDefinitionSource">
<value>
<![CDATA[
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
\A/writeAction.do/.*\Z=ROLE_WRITER
]]>
</value>
</property>
</bean>

URL的写法你再推敲下,Struts我用的不多,

2.想用数据库验证的话你要将验证方式修改一下

<bean id="authenticationManager"
class="org.acegisecurity.providers.ProviderManager">
<property name="providers">
<list>
<ref bean="daoAuthenticationProvider" />
</list>
</property>
</bean>

<bean id="daoAuthenticationProvider"
class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
<property name="authenticationDao">
<ref bean="authenticationDao"/>
</property>
</bean>

<bean id="authenticationDao"
class="org.acegisecurity.providers.dao.jdbc.JdbcDaoImpl">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="usersByUserNameQuery"> <!--确认用户存在-->
<value>SELECT login, password FROM student WHERE login=?</value>
</property>
<property name=”authoritiesByUserNameQuery”> <!--获得角色-->
<value>SELECT login, privilege FROM user_privileges where login=?</value>
</property>
</bean>


3.acegi是利用了URL过滤机制实现,所以配置自然也要在过滤器的配置文件里了

believefym 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 gameknightconan 的回复:]
引用 9 楼 believefym 的回复:
没人回。。。

再问一下: 对于没有权限访问之后,能不能返回到当前页面,并嵌入一些errormessage,类似于struts的errormessage

貌似现在我这边还只能返回到另外一张AccessDenied页面,或者没有配置过的话,也会自动出来下面的信息
引用
Access Denied Page !
This page is configured in exception tranlstion filter just for clarity.
It will not be invoked by Acegi, because once you are login in this sample application, you have access to all application resources.


谁提供点资料。。。。


在authenticationProcessingFilter中加入如下属性:
<property name="exceptionMappings">
  <props>
    <prop key="org.acegisecurity.BadCredentialsException">/XXX.jsp </prop>
    <prop key="org.acegisecurity.DisabledException">/YYY.jsp </prop>
  </props>
</property>

资料的话,可以看看 罗时飞 的《敏捷acegi、cas 构建安全的java系统》
[/Quote]

<prop key="org.acegisecurity.BadCredentialsException">/XXX.jsp </prop>
我现在也是类似这样配置的,但是这样的话,XXX.jsp将作为所有没有相应权限而去访问资源后的跳转页面

比如我想访问a.jsp, 如果没有相应的权限,则仍然能到a.jsp,但是只是在页面上提示说没有权限,而不在页面上显示相应的业务数据

不知道acegi能不能实现这样定制的功能,感觉好像这个框架不太好实现这样的需求,求证一下。。。
吐司vivi 2009-09-07
  • 打赏
  • 举报
回复
spring security有个投票器,你要定义一个自己的投票,查看当前的url是否被当前用户所在的组容许访问
吐司vivi 2009-09-07
  • 打赏
  • 举报
回复
这些url应该保存在数据库表中,然后跟你的用户组表应该有个关联表,记录用户组下的用户可以访问哪些资源
gameknightconan 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 believefym 的回复:]
没人回。。。

再问一下: 对于没有权限访问之后,能不能返回到当前页面,并嵌入一些errormessage,类似于struts的errormessage

貌似现在我这边还只能返回到另外一张AccessDenied页面,或者没有配置过的话,也会自动出来下面的信息
引用
Access Denied Page !
This page is configured in exception tranlstion filter just for clarity.
It will not be invoked by Acegi, because once you are login in this sample application, you have access to all application resources.


谁提供点资料。。。。
[/Quote]

在authenticationProcessingFilter中加入如下属性:
<property name="exceptionMappings">
<props>
<prop key="org.acegisecurity.BadCredentialsException">/XXX.jsp</prop>
<prop key="org.acegisecurity.DisabledException">/YYY.jsp</prop>
</props>
</property>

资料的话,可以看看 罗时飞 的《敏捷acegi、cas 构建安全的java系统》
believefym 2009-09-07
  • 打赏
  • 举报
回复
没人回。。。

再问一下: 对于没有权限访问之后,能不能返回到当前页面,并嵌入一些errormessage,类似于struts的errormessage

貌似现在我这边还只能返回到另外一张AccessDenied页面,或者没有配置过的话,也会自动出来下面的信息
[Quote=]
Access Denied Page !
This page is configured in exception tranlstion filter just for clarity.
It will not be invoked by Acegi, because once you are login in this sample application, you have access to all application resources.
[/Quote]

谁提供点资料。。。。
gameknightconan 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 believefym 的回复:]
<prop key="org.acegisecurity.BadCredentialsException">/XXX.jsp </prop>
我现在也是类似这样配置的,但是这样的话,XXX.jsp将作为所有没有相应权限而去访问资源后的跳转页面

比如我想访问a.jsp, 如果没有相应的权限,则仍然能到a.jsp,但是只是在页面上提示说没有权限,而不在页面上显示相应的业务数据

不知道acegi能不能实现这样定制的功能,感觉好像这个框架不太好实现这样的需求,求证一下。。。
[/Quote]
当IE用户初次访问受保护的Web资源时,ExceptionTranslationFilter过滤器会捕捉到AccessDeniedException异常,此时,它会调用自身的sendStartAuthentication()方法。它构建SavedRequest对象,并将httpRequest请求保存到其中。随后,将savedRequest对象保存在ACEGI_SAVED_REQUEST_KEY属性中。
一旦AuthenticationProcessingFilter成功认证用户,这一过滤器便会调用自身的
sucessfulAuthentication方法,去HttpSession的ACEGI_SAVED_REQUEST_KEY属性中查找SavedRequest对象,从而返回给IE客户之前的URL信息。

上面是从书上帮你抄的,它没说认证失败后如何获得SavedRequest对象,不过应该是可以的,LZ自己想想办法,哈~
QQsongbing 2009-09-04
  • 打赏
  • 举报
回复

有没有视频啊?
believefym 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 believefym 的回复:]
HTML code<beanid="methodDefinitionSourceAdvisor"
class="org.acegisecurity.intercept.method.aopalliance.MethodDefinitionSourceAdvisor"><constructor-arg><beanclass="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor"><propertyname="authenticationManager"><refbean="authenticationManager"/></property><propertyname="accessDecisionManager"><refbean="methodAccessDecisionManager"/></property><propertyname="objectDefinitionSource"><value> com.xxx.WriteAction.execute=ROLE_WRITER</value></property></bean></constructor-arg></bean>
[/Quote]

配置文件里的这段代码需要在哪里配置才能起作用?
现在跑起来貌似没起作用。。。
believefym 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 toss2000 的回复:]
引用 4 楼 believefym 的回复:
关于那个role
类似ROLE_WRITER, 可以在properties文件,或者数据库里定义的吧,

有没有使用数据库的例子,user表应该是怎么定义的?role是怎么拿的?

如果楼主想自己获得数据表定义的角色,需要自己实现acegi的接口,我水平比楼主要差很多,楼主要是愿意不耻下问,可以给我留邮箱
[/Quote]

believefym1161#163.com
toss2000 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 believefym 的回复:]
关于那个role
类似ROLE_WRITER, 可以在properties文件,或者数据库里定义的吧,

有没有使用数据库的例子,user表应该是怎么定义的?role是怎么拿的?
[/Quote]
如果楼主想自己获得数据表定义的角色,需要自己实现acegi的接口,我水平比楼主要差很多,楼主要是愿意不耻下问,可以给我留邮箱
believefym 2009-09-03
  • 打赏
  • 举报
回复
关于那个role
类似ROLE_WRITER, 可以在properties文件,或者数据库里定义的吧,

有没有使用数据库的例子,user表应该是怎么定义的?role是怎么拿的?
w11x22b33 2009-09-01
  • 打赏
  • 举报
回复
帮LZ顶
吐司vivi 2009-09-01
  • 打赏
  • 举报
回复
http://www.javaeye.com/topic/319965
加载更多回复(1)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧