|
该帖已经被评为新手帖
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-04-11
我们在处理用户登录的时候:
public class LoginAction extends ActionSupport implements ServletResponseAware, ServletRequestAware, SessionAware{
public String login()throws Exception{
...
User user = new userDao(loginName, password);
session.put(USER_SESSION_KEY, user);
return SUCCESS;
...
}
}
登录成功后将user对象写入session。 现在的问题是,其他的action里需要把user对象取出来。 最笨的办法是每个action里都定义user成员对象,execute方法里都写语句从session取出user赋给对象。 我想应该有更好的方法,能统一的设置user对象并调用,用继承或拦截器什么的。 刚接触Java和Struts,没什么经验积累,请各位不吝赐教。 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-04-11
这肯定要用拦截器实现了,我正在学。。。观望一下。。。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-04-11
楼主可以自己定义一个抽象类,里面声明一个user属性,以及setter、getter方法然后
1、通过拦截器给user赋值 2、通过getter方法给user赋值 这样你的所有子类的action 都可以通过getter取到user了。 |
|
| 返回顶楼 | |
|
最后更新时间:2008-04-11
filter很不错的选择.
|
|
| 返回顶楼 | |
|
最后更新时间:2008-04-11
session只要是一次会话当中都能使用哈.你从session里取出来就可以了样
|
|
| 返回顶楼 | |
|
最后更新时间:2008-04-11
1.定义BaseAction,通用的操作都放里面,包括获取User。
2.看你用的好像是webwork,让BaseAction实现user的aware接口可以自动注入。 |
|
| 返回顶楼 | |
|
最后更新时间:2008-04-11
如果是关于用户身份和权限的操作工作,
filterServlet是一种选择,可以通过配置Filter链和映射路径达到权限封锁的效果 如果是在struts下的话,我个人以为filterServlet虽然仍然奏效,但是ActionServlet作为总控制器,如果能在其身上想办法,似乎逻辑更加明确。 在Struts中,担任MVC/Model 2控制器角色核心的是ActionServlet,所有的请求都必须先通过它,在Struts 1.1中,有关于请求的处理大部份已交由RequestProcessor,当ActionServlet收到GET或POST的请求,其doGet()或doPost()会呼叫process()方法来处理请求 因此在struts中,扩展RequestProcessor是一种不错的选择 |
|
| 返回顶楼 | |
|
最后更新时间:2008-04-12
姜太公 写道 1.定义BaseAction,通用的操作都放里面,包括获取User。
2.看你用的好像是webwork,让BaseAction实现user的aware接口可以自动注入。 我觉得这种方法比较合适,我们用的就是这样 |
|
| 返回顶楼 | |
|
最后更新时间:2008-04-14
这个问题基本解决,向大家汇报一下
首先建了个Action的基类 public class AppAction extends ActionSupport {
public AppUser appUser;
public void setAppUser(AppUser user){
this.appUser = user;
}
}
需要获取user的action从这个类继承下来。 然后定义了一个拦截器
public class LoginInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext actionContext = invocation.getInvocationContext();
Map session = actionContext.getSession();
if (session != null && session.get(com.demo.AppUser.USER_SESSION_KEY) != null){
Object action = invocation.getAction();
//发现是AppAction
if( action instanceof AppAction) {
AppAction appAction = (AppAction)action;
AppUser user = (AppUser)session.get(com.demo.AppUser.USER_SESSION_KEY);
appAction.setAppUser(user); //从session取出user对象设置给AppAction实例
}
return invocation.invoke();
}
return "globalLogin";
}
}
再定义一个package,所有需要权限拦截器的action用这个 <!-- 定义含“权限检查拦截器”的包,供其他模块引用 -->
<package name="struts-default-with-auth-check" extends="struts-default">
<interceptors>
<!-- 定义“权限检查拦截器” -->
<interceptor name="authCheck"
class="com.test.interceptor.LoginInterceptor">
</interceptor>
<!-- 定义含“权限检查拦截器”的拦截器栈,注意缺省的拦截器栈“defaultStack”要放在前面 -->
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authCheck"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 正式应用可能含很多package,为了能从其他package中跳转到登录页面,把登录页面定义成全局result -->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<global-results>
<result name="globalLogin">/login.jsp</result>
</global-results>
</package>
这个配置是从 http://blog.csdn.net/JavaWinner/archive/2008/03/16/2186778.aspx 这里学习来的 |
|
| 返回顶楼 | |
|
最后更新时间:2008-04-18
姜太公 写道 1.定义BaseAction,通用的操作都放里面,包括获取User。
2.看你用的好像是webwork,让BaseAction实现user的aware接口可以自动注入。 他用的明明是struts2嘛 |
|
| 返回顶楼 | |







