dwr + extjs + spring 通过MethodInterceptor进行权限控制遇到的问题

目前一个项目运用标题框架进行权限控制碰到以下问题:
MethodInterceptor 下的方法
[code="java"]
public Object invoke(MethodInvocation invocation) throws Throwable {
//通过dwr 的session 里面的值来判定用户是否登录,如果没有登录?
//跳转到登录页面
}
[/code]
现在跳转这里碰到问题
1.如果得到dwr 传过来的信息,因为这里过来上下文是
HttpServletResponse response = WebContextFactory.get().getHttpServletResponse();
,是xml...假格式的response ,这里response.sendRedirect("index.html"); 在前台没有起到跳转作用。
2.或者是在invoke 直接返回一个没有登录字符串到前台,让dwr调用的方法得到返回值来判定是否登录,而一旦dwr调用方法本身返回的类型是非string 型的话,就会产生异常。

我不知道acegi 或者Spring Security 里面是怎么来对这种情况进行处理的,不知道大家有没有碰到过类似的问题。有什么方法来解决这个问题,或者有其他的权限控制,希望大家能给予帮助,谢谢!
[b]问题补充:[/b]
首先谢谢各位的回答,我突然觉得,这个分数不好给了。
如果能把这个分数分配给多个人就好了。
我对各位的建议给一个回复,可能我的问题不是很详细,导致有些地方表述的意图不是很明确。
pJun:目前这个项目不走前台的url,所有的数据的获取都是直接走dwr,所有的权限控制是走spring 方法上的来走,通过在dwr调用service 方法的上面加annotation ,来得到这个method 需要的权限点,再通过MethodInterceptor 中得到session里面保存用户所具有的权限点,来控制用户是否有权限来调用这个方法。如果走filter的话,我不知道是否能拿到dwr所调用的方法的信息,以及该方法所应该局要的权限点信息。
yourgame:谢谢你全局架构的建议,但是目前这个项目很特殊,由于是给客户公司做的,我们是分层开发,而做前台用extjs 是客户公司的人员,对于extjs 认识不是很深刻,如果用ext.Ajax 这个下面来走的话,是不是也要走url 来得到数据啊,就是说这个里面应该有一个struts,或者webwork或者servlet的东西在里面,用来引导这个ajax的请求?
lt0604:恩,这个方法来解决这个登录权限跳转问题是可以,但目前没按这种方式来走,因为在java dwr 调用里面会抛出多种类型的异常,而且前台有根据异常会给出相应的提示信息的需求。
xyz20003:要的就是这个思路,由于这个问题已经解决,没有用到Spring Security,是自己写了一个满足这个项目权限控制的东东。不过里面的思路就是这样,现在是在MethodInterceptor 抛出异常,通过dwr自己对异常的处理机制来实现的。
layer555:“而一旦dwr调用方法本身返回的类型是非string 型的话,就会产生异常。”就是我一个dwr方法请求得到一个list,而在这个MethodInterceptor 返回一个string ,就会抛异常出来。我现在项目里面就是用你这个,通过dwr.engine.setErrorHandler(callBackFunction);来处理,把错误代码放到exception里面。前台得到exception 里面的错误信息进行全局的处理。
再次谢谢大家。我真的不知道怎么给分了。

7个回答

在invoke 直接返回一个没有登录字符串到前台,让dwr调用的方法得到返回值来判定是否登录,而一旦dwr调用方法本身返回的类型是非string 型的话,就会产生异常。
这样是肯定可行的,我也一直是这么做的,只不过你所指的非String类型就产生异常是什么意思?所有的基本类型默认都是可以转换的,自定义的对象只要配置相应的converter就可以了;如:



在这里match是支持*匹配的

感觉有点晕,LZ的DWR到底起些什么作用呢? 请LZ说明下这里DWR的使用思路.

另:通用的权限控制可以有好些方式的,filter什么的.LZ可自己Google一把.

首先要说的是,不推荐extjs和dwr整合,dwr能做的,extjs都可以啊.如果你想用你的那种权限控制的话,建议你所有的请求全部有extjs发出,别通过dwr

再说一下,extjs是一个ajax框架,全局只适用一个ajax请求对象,Ext.Ajax.request都是静态方法,为的就是减少开销,所以,你使用dwr等于另辟一条.

直接抛个NOTLoginException,web.xml配置这个异常页面跳转

NOTLoginException是自己定义的忘了说

Spring Security会在没有权限的时候抛出一个异常,你需要捕捉这个异常,然后进行对应的处理。

默认是返回403访问拒绝响应。你只methodSecurityInterceptor的话,只需要调用的时候判断异常就行了。

有关Spring Security中的MethodSecurityInterceptor可以参考
http://www.family168.com/oa/springsecurity/html/ch201-method.html

"就是我一个dwr方法请求得到一个list,而在这个MethodInterceptor 返回一个string "? DWR返回什么值总计应该是可以控制的啊? 而且在js也可以对返回结果进行类型判断,不明白为什么会出这个错

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问