开发web项目的时候,要设置已经登录的用户才能进入系统,不运行直接通过页面的地址直接访问,那该怎么做?请大家支支招....
10条回答 默认 最新
- shuaijie506 2013-01-18 08:06关注
你可以在系统中使用Filter技术。
Filter 技术是servlet 2.3 新增加的功能。servlet2.3是sun公司于2000年10月发布的,使用它可以改变一个request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在response离开servlet时处理response.换种说法,filter其实是一个“servlet chaining“(servlet 链).
[b]一个filter 包括:[/b]
1. 在servlet被调用之前截获;
2. 在servlet被调用之前检查servlet request;
3. 根据需要修改request头和request数据;
4. 根据需要修改response头和response数据;
5. 在servlet被调用之后截获.
你能够配置一个filter 到一个或多个servlet;单个servlet或servlet组能够被多个filter 使用。几个实用的filter 包括:用户辨认filter,日志filter,审核filter,加密filter,符号filter,能改变xml内容的XSLT filter等。
一个filter必须实现javax.servlet.Filter。下面给出我项目中的未登录过滤的代码:
[code="java"]
public class CheckLoginFilter implements Filter
{public void init(FilterConfig arg0) throws ServletException { } public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)arg0; HttpServletResponse response = (HttpServletResponse) arg1; User user = (User)request.getSession().getAttribute("loginUser"); if(user==null){ response.sendRedirect(request.getContextPath()+"/common/noSessionPage.jsp"); //返回重新登录界面 return; } arg2.doFilter(arg0,arg1); }
}
[/code]web.xml
[code="xml"]<filter> <description>登录验证拦截</description> <filter-name>loginCheckFilter</filter-name> <filter-class>com.xxx.auth.CheckLoginFilter</filter-class> </filter> <filter-mapping> <filter-name>loginCheckFilter</filter-name> <url-pattern>/sys/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>loginCheckFilter</filter-name> <url-pattern>/pub/*</url-pattern> </filter-mapping>
[/code]
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥100 为什么这个恒流源电路不能恒流?
- ¥15 有偿求跨组件数据流路径图
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
- ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
- ¥15 CSAPPattacklab
- ¥15 一直显示正在等待HID—ISP
- ¥15 Python turtle 画图
- ¥15 stm32开发clion时遇到的编译问题
- ¥15 lna设计 源简并电感型共源放大器
- ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)