论坛首页 入门技术论坛

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

浏览 3870 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-10-12  
老系统移植到基于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" class="com.digitalchina.pmcenter.user.entity.UserInfo" scope="session">
<aop:scoped-proxy/>
</bean>

<!-- 配置Service -->
<bean id="userService" class="com.digitalchina.pmcenter.user.service.impl.UserServiceImpl" 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("合同审核时发生异常");
}
}
}
-----------------------------------------------------------

不知
   发表时间:2007-10-12  
不知spring所说的session scope的bean是否是我登陆后放到session中的哪种session范围的bean。

是否有其他解决方案
0 请登录后投票
   发表时间:2007-10-17  
不知道,你是否在web.xml中配置了
<listener>
    <listener-class>org.springframework.web.context.scope.RequestContextListener</listener-class>
</listener>
呵呵,我也是刚刚接触,不知道是不是这个原因
0 请登录后投票
   发表时间:2007-10-26  
已经配置了
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics