- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 servlet 构建一个简单的 Web 应用程序。我是一名初学者,但已尝试学习这项技术的大部分内容。有件事我想不通。我的 servlet 之一是有用的 BalusC FileServlet
http://balusc.blogspot.mx/2007/07/fileservlet.html
它用所需的文件响应 GET 请求,干净整洁。
我使用此 FileServlet 为 Dygraph 提供 CSV 文件
http://dygraphs.com/
我有两种类型的用户:访客和管理员。访客应该能够看到图表,但不能下载 CSV 文件。管理员应该能够做到这两点。
fileServlet 响应 URL 模式为:file/*(* 是文件名),并且非常方便,因为 Dygraph 读取 URL 中指定的文件。
此 web 应用程序中内置了一个 loginServlet,如果用户只是复制粘贴为 Dygraph 提供的 URL,我希望能够避免 fileservlet 提供文件。 FileServlet 已经能够从该 session 获取 session 和登录用户,但我不知道如何检测调用 GET 方法的页面是什么。我希望 fileservlet 仅在从 JSP 代码中调用时才提供文件服务,而不是从浏览器的地址栏调用。
让我解释一下:
我的意思是 - 作为访客用户 - 以下 Javascript 代码应该显示图表(FileServlet 提供文件服务)
<div id="graphdiv2" style="width:640px; height:480px;">
<script type="text/javascript">
g2 = new Dygraph(
document.getElementById("graphdiv2"),
"${messages.rutacsv}", // path to CSV file
{
rollPeriod: 10,
showRoller: true
}
);
</script>
</div>
变量:“${messages.rutacsv}” 被 servlet 替换,如下所示:
“文件/2012-04-20_1.csv”
因此 Dygraph 可以很好地加载文件并绘制线条。
但是,我希望 FileServlet 能够检测到用户何时在 ContextName 后复制粘贴此 URL 并阻止它,因此只有 Dygraph 可以下载该文件。
例如,如果用户在浏览器中键入:
http://localhost:8080/MyWebApp/file/2012-04-20_1.csv
应该无法下载。只有管理员应该能够。
现在,我想也许我应该实现 FileServlet,因此必须使用另一个 URL 模式或 POST 方法来调用它,这样简单的用户复制面食就无法通过“origining-JSP”检查。
顺便说一句,我刚尝试完 Struts2,它对于这个应用程序来说太复杂了。为了方便和轻松地使用简单的 servlet 和 JSP 进行开发,我放弃了它。
最佳答案
使用 filter检查用户角色。也就是说,在进行任何重要的操作之前,都要检查用户是否有权执行此操作。这是任务 servlet 过滤器。
您必须在扩展 javax.servlet.Filter
的类中实现方法 doFilter()
,如下所示:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession();
String currentRole = (String) session.getAttribute("userRole");
if ("admin".equals(currentRole)) {
successRedirect();
} else {
failRedirect();
}
chain.doFilter(request, response);
}
并且不要忘记将此过滤器映射到 web.xml 文件中所需的地址:
<filter>
<filter-name>CheckRightAccessFilter</filter-name>
<filter-class>yourproject.CheckRightAccessFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CheckRightAccessFilter</filter-name>
<url-pattern>*.csv</url-pattern>
</filter-mapping>
关于java - 如何让Servlet识别调用者JSP和 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10377394/
我是一名优秀的程序员,十分优秀!