【发布时间】:2018-02-02 19:29:05
【问题描述】:
我是新来的,但读了很多次这个页面。我有一个复杂的问题,而且我不是以英语为母语的,所以如果我不能理解,请先原谅我。
我为我们的旧 Oracle Portal 10g 服务器编写了一个 portlet。在 portlet 中,一个 javascript 函数使用 ajax 将一些数据发布到 servlet。
我想在调用 servlet 时识别用户。我可以从 portlet 会话中传递一些东西吗?就像在 portlet 中一样,有一个 PortletRenderRequest,我可以获得该用户的用户名和权限。
简而言之,我的理论 portlet 函数:它是一个表单,如果有人填写它,并使用 javascript ajax 将数据发送到 servlet,我想检查一下,发送者有权将数据插入数据库(以及她/他的姓名)。现在它可以工作了,portlet 获取用户数据并写入输入的隐藏元素值,然后 javascript 读取它,并与帖子一起发送,但这是很容易破解的,而且是糟糕的解决方案。
现在理论上它看起来像这样:
portlet.jsp:
<%
PortletRenderRequest pReq = (PortletRenderRequest)request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
String userNev = pReq.getUser().getName();
session.setAttribute("username",userNev);
System.out.println("session ID in JSP: "+session.getId());
%>
<button class="btn" type="button">Upload data</button>
<script type="text/javascript">
$(function() {
$(".btn").click(function(){
/*.....*/
$.post( "/demo/servlet", poststring);
});
});
</script>
小服务程序:
public class servlet extends HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = (request.getSession());
System.out.println("Session ID in servlet: "+session.getId());
/*....*/
}
}
目前它在 JDeveloper 10.1.3.5 中运行。
每次页面刷新都会在控制台中显示不同的“JSP 中的会话 ID”,但“servlet 中的会话 ID”不会改变,所以它必须是正确的。
所以现在唯一的任务就是把数据放在正确的HttpSession中,我只需要在jsp页面中以某种方式访问。
HttpSession Session = request.getSession(); 在 jsp 页面上返回错误的会话(每次刷新都会改变)。
编辑:
毕竟@Jonathan回答了所有问题。这会导致额外的问题,比如如何在 jsp 页面上获取 HttpSession?
我发现,jsp 页面上的 session = HttpSession = ProviderSession,与 servlet 中的 HttpSession 不相等。
(如果我将提供商注册页面上的登录频率设置为“始终”,jsp 页面上的 ProviderSession 不会随着页面刷新而改变)
我真的不知道 ProviderSession 和 HttpSession 之间的区别,以及如何从一个访问到另一个。如果我可以从 servlet 到达 ProviderSession,那么从使用角度来看是一样的吗?
【问题讨论】:
标签: javascript java servlets portlet