我要做一个东西,在用户进入Web画面的时候,要从WEB-INF目录下读取一个xml文件,将该xml文件的部分内容显示到该画面。
我通过下面的方法取文件
[b]
ServletContext servletContext = context.getServletContext();
InputStream inputStream = servletContext.getResourceAsStream("config.xml");
Document document = MyUtil.buildDocument(inputStream);
Element rootElm = document.getDocumentElement();
[/b]
但是目前的情况是这样,Sample的做法是通过 j_security_check的验证,转向到各自不同的画面,然后来做我上述的处理。
目前只是做一个Demo,我不想用 j_security_check验证,因此,我将该验证的处理以及配置都删除,直接转向到某个画面,结果无法得到
Document 和 Element。
我大概分析了一下原因,可能是没有Session的缘故,但是不是很确定。不太明白 j_security_check的处理机制,请大家帮忙分析一下 j_security_check是怎么处理的,我该如何去做才能够产生我要的效果?
引子:
j_security_check,正确的说是JAAS验证。我不太清楚你是在什么环境下启动的tomcat,如果是在MyEclipse下运行,请检验window->Preferences->MyEclipse->Application Server->Tomcat->Tomcat5.x->JDK目录下Optioal Java VM arguments
中有没有类似-Djava.security.manager -Djava.security.policy=XXX的参数。好了,
1 现在说一下大概原理:
是用JAAS安全验证就是当用户在java程序中(正确的说通过JVM)通过网络或者IO的方式访问资源时,JVM会使用java.security.manager或者其他java验证的类做代理去访问。在访问之前jvm会检验访问者是否有权访问。那么如何确认用户是否有权访问呢?jvm会通过java.security.policy类查找授权用户的权限。
2 说说你的问题:有可能你访问的config.xml 已经被JAAS所控制(一般写在一个JAR包或者DB中,如果在DB中,可以在server.xml中配置),因为你删除tomcat中了关于JAAS的配置,所以你的java程序访问config.xml的时候JAAS无法找到你的权限,所以理论上会抛出SecurityException的异常(也许你在捕捉Exception异常的时候已经捕获,只不过你没注意)。
3 说说解决办法,很简单。除了去除所有关于JAAS的配置(包括web.xml和server.xml等)。还有把window->Preferences->MyEclipse->Application Server->Tomcat->Tomcat5.x->JDK目录下Optioal Java VM arguments中的参数去掉。这个参数实际指定了你的web应用在JVM中的代理。如果去掉,就相当于没有安全认证的裸奔。