如何解决我如何在@service类中获取HttpServletRequestObject
|| 我已经能够成功集成Spring和Spring4GWT。 一切正常。 我面临的唯一问题是如何在@service
类中获得HttpServletRequestObject
?
一些配置和代码
web.xml
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>org.spring4gwt.server.SpringGwtRemoteServiceServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/ui/test/*</url-pattern>
</servlet-mapping>
服务等级
public class LoginServiceImpl implements ILoginService {
private IUserService userService;
public LoginServiceImpl(IUserService userService) {
super();
this.userService = userService;
}
public boolean isAuthenticUser(String userName,String password) {
// operation
}
}
在ѭ4中,我无法获取Servlet对象。
我在这里需要它,以便可以将其用于其他目的。
任何想法?
解决方法
终于我找到了解决方案。
如果有人希望访问GWT-RPC服务中的HttpServletrequest,则以下内容可以提供帮助。
修改web.xml
<filter>
<filter-name>springRequestFilter</filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>springRequestFilter</filter-name>
<url-pattern>/your_pattern/*</url-pattern>
</filter-mapping>
服役中
ServletRequestAttributes sra = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes());
sra.getRequest();
希望这会有所帮助
, 从设计的角度来看,you should NOT have a HttpServletRequest object in your service layer
。相反,从请求中检索所需的信息,并将它们作为参数传递给服务层。
请进一步说明您要做什么以及为什么在服务层中需要HttpServletRequest对象。
否则,您的依赖关系层次结构将具有循环。视图层取决于服务层,服务层取决于视图层。
, 您需要将HttpServletRequest从控制器传递到Service方法(例如,作为方法参数)。
无论如何:
您的服务方法应从诸如httpServletRequestObject之类的内容中抽象出来。此抽象通常在(Web)控制器中完成。
看起来您是在重新发明安全性内容,您对Spring Security有所了解吗?
, 还有另一种解决方案,当您也需要HttpServletResponse
时可能会派上用场。
简单的说:
使您的ServiceImpl
类扩展到org.spring4gwt.server.SpringGwtRemoteServiceServlet
(无论如何,您都应该这样做)
然后更改SpringGwtRemoteServiceServlet#getBean()
以返回this
对象
只要您的web.xml
是指您的not9ѭ而不是直接使用Spring4GWT,则this
将是您的ServiceImpl
扩展SpringGwtRemoteServiceServlet
的实例。这也是标准的GWT方式,您甚至可以使用@RemoteServiceRelativePath将其自动化。
您还想通过SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this)
运行servlet(上面的this
对象)来完成依赖注入
这样,您的ServiceImpl
还将成为响应请求的servlet,并且能够从父类访问getThreadLocalRequest()
它看起来并不那么骇人听闻。基本上,GWT希望您的服务类是servlet,而Spring4GWT希望它是标准的Spring组件。这种方法介于两者之间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。