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

本文探讨了老系统权限模块移植到Spring框架的问题。原有权限控制位于Service层,现需利用Spring框架实现更灵活的权限管理。文章介绍了如何通过Spring注入Session中的UserInfo对象,简化权限验证流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

老系统移植到基于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("合同审核时发生异常");
}
}
}
-----------------------------------------------------------

不知
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值