首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

如果把一个session scope的bean流入给service(把登陆后session范围的user注入到服务层)

2012-10-26 
如果把一个session scope的bean注入给service(把登陆后session范围的user注入到服务层)老系统移植到基于sp

如果把一个session scope的bean注入给service(把登陆后session范围的user注入到服务层)
老系统移植到基于spring, struts, hibernate架构,由于原有权限都是做到service层,即在调用某个业务方法的前面硬编码判断是否有权限。权限做到service里是否合理暂且不考虑。

原来action调用service的方法时都要给service方法多传递一个UserInfo 参数,现在想使用spring给service注入保存在session中的UserInfo, 不知如果解决。

service和dao应该都时单例的
-----------------------
public class UserAction extends BaseAction{

public ActionForward login(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {

UserForm userForm = (UserForm)form;
UserInfo user = userForm.getUser();
user = getFacade().getUserService().login(user.getUserName(), user.getPassword());
if(user==null){ //无此用户,即登陆失败
throw new ApplicationException("对不起,用户名或密码错误,登陆失败");
}
request.getSession().setAttribute("userInfo", userInfo);
return mapping.findForward("success");
}
}
-----------------------
<!-- 配置session范围的userInfo -->
<bean id="userInfo" scope="session">
<aop:scoped-proxy/>
</bean>

<!-- 配置Service -->
<bean id="userService" scope="prototype">
<property name="userDao" ref="userDao"/>
<property name="userInfo" ref="userInfo"/>
</bean>
-----------------------
public class UserServiceImpl implements UserService{

private UserDao userDao;
         protected UserInfo userInfo;

public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
}
/**
* 合同审核
* 捕获Dao层由spring统一包装后的DataAccessException异常
* 重新抛出服务为异常,并赋予异常代码,服务异常将被action指定捕获
*/
public void auditingContractApply(String userName, String password) {
                  UserInfo userInfo= getUserInfo();
                  //userInfo不空,获得是spring代理类
System.out.println("userInfo from session: "+ userInfo);
                  //userName 为空,不知为什么
                  System.out.println("userName from session: "+ userInfo.getUserName);
try {
//具体调用dao的方法完成业务
} catch (DataAccessException e) {
e.printStackTrace();
throw new ServiceException("合同审核时发生异常");
}
}
}
-----------------------

不知
哥哥 我来看看你嘿嘿 让我找到你了

热点排行