例1、登录验证
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request
HttpServletResponse res = (HttpServletResponse) response
if(req.getSession(true).getAttribute("登录标记")==null){
res.sendRedirect("登哪盯模陆页面")
return
} else {
chain.doFilter(request, response)
}
}
<web-app ...>
<filter>李缓
<filter-name>名字随便起</filter-name>
<filter-class>wyf.web.servlet.filter.WangyfPrintFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>这里的名字要与上面的名字一致</filter-name>
<url-pattern>这里填写要保护的路径 * 表示一切(如/user/*)</</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
例2、高级权限验证
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request
HttpServletResponse res = (HttpServletResponse) response
if(req.getSession(true).getAttribute("高级用户标记")==null){
res.sendRedirect("高级用户登陆页面")
return
} else {
chain.doFilter(request, response)
}
}
<web-app ...>
<filter>
<filter-name>不能和上面的名字相同</filter-name>
<filter-class>***.***Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>要与上面的名字一致</filter-name>
<url-pattern>高级用户的路径一般是低级用户的子目录(如/user/gaoji/*)</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<则雀dispatcher>FORWARD</dispatcher>
</filter-mapping>
其他说明,
1、把要保护的 JSP 文件放到 WEB-INF 下的对应的目录中。
2、Servlet 的路径也要与保护路径一致
3、登录成功后要把相应的登录标记放到 Session 中。
ServletActionContext.getRequest().setAttribute("Login","true")只是request是不够的,用request则是一次页面请求后Login这个Attribute就没有了.
应该是用Session
ServletActionContext.getRequest().getSession(true).setAttribute("Login","true")
这样消磨枯就是在整个会话过游裂程中都有效..
然后到了每个jsp页面的时候,在jsp页拿洞面开头进行下验证
<%
if(request.getAttribute("Login")!=null){
String message=(String)request.getAttribute("Login")
if(!message.equals("true"))
//如果登录标志不为true则跳转回登录页面
response.sendRedirect("/login.jsp")
}
%>
其实用过滤器Filter也可以做,原理是类似的..
struts2中防止jsp不被直接访问的方法是把jsp放在WEB-INF目录下。struts2的WEB-INF路径下的jsp文件是受保护的,禁止客户端的浏览器直接对jsp文件进行访问。
所以在struts.xml中的配置action的返回结果result时,应该配裂态置全路径。
配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//液脊EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/" extends="肆埋源struts-default">
<action name="index" class="com.maple.action.IndexAction">
<result>/WEB-INF/admin/login.jsp</result>
</action>
</package>
</struts>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)