问题描述
开发web项目的时候,要设置已经登录的用户才能进入系统,不运行直接通过页面的地址直接访问,那该怎么做?请大家支支招.... 问题补充:没登录的用户会返回登录页面
解决方案
你可以在系统中使用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 链).一个filter 包括: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。下面给出我项目中的未登录过滤的代码: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); } }web.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>
解决方案二:
我就说嘛!让你用拦截器!晓得啥子叫拦截器?
解决方案三:
使用struts的过滤器就好了,不必那么复杂的。
解决方案四:
如果仅仅是登录认证用 @shuaijie506 的方案.再复杂点, 需要权限控制, url过滤.推荐Apache Shiro.用了之后, 你会发现如此简单。
解决方案五:
简单点 session 控制 复杂点的 apache shiro 谁用谁知道
解决方案六:
你用的什么框架?加入拦截器就欧了
解决方案七:
要想做到最大化的安全,试试spring security安全框架。
解决方案八:
既然你使用的是struts2,可以讲jsp资源放到WEB-INF下,这样会增加资源的安全性,迫使用户只能通过action去访问,直接在导航栏输入jsp资源的名称是无法访问的,同事结合struts2的是拦截器进行判断,判断session是否为空,如果为空也就是说明没有登录,不允许访问,如果session不为空,还要检查当前用户是否有访问该资源的权限,如果没有也不允许访问
解决方案九:
可以通过session控制,在访问页面时发现session中登陆信息为空,则自动跳转到登陆页
解决方案十:
把所有jsp页面都放在/WEB-INF/目录下,能防止网页直接访问jsp页面,直接访问会报资源找不到,用户只能通过action跳转进去。当然,可以留一个login.jsp或者index.jsp在/WEB-INF外用来直接访问。