很多时候,我们都需要做用户登录和登录用户的权限管理,如何防止没登录系统的用户访问不该访问的页面呢?
第一种解决办法,在没个用户登录相关的页面中判定相应的session是否为空,系统比较小该方法还可行? 系统比较大呢?上千个页面呢?难道也要在每个页面中去判断吗?这或许不太可取
第二种,引入filter
具体实现如下:
我们在Action中,利用request.getSession().setAttribute("user",user);
并讲请求分发到scuess.jsp
scuess.jsp中无需做任何session就能判定用户是否非法登录
嘿嘿,别忘了,在web.xml中还需要配置;
- <filter>
- <filter-name>loginFilter</filter-name>
- <filter-class>com.lovexx.tools.LoginFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>loginFilter</filter-name>
- <url-pattern>/scuess.jsp</url-pattern>
- </filter-mapping>
忘和j2ee爱好者多多交流,共同进步
在struts开发中,对特定目录下的页面进行过滤的时候,要注意别对action path 相对路径的aciton.do进行验证,否则会出错,
如我的web.xml中的配置如下
- <filter>
- <filter-name>loginFilter</filter-name>
- <filter-class>com.zq.tools.LoginFilter</filter-class>
- <init-param>
- <param-name>undo</param-name>
- <param-value>/index.jsp</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>loginFilter</filter-name>
- <url-pattern>/company/*</url-pattern>
- </filter-mapping>
而struts-config.xml中的配置如下
- <action
- attribute="loginForm"
- name="loginForm"
- path="/company/login"
- scope="request"
- type="com.zq.struts.action.LoginAction">
- <forward
- name="scuess"
- path="/company/main.jsp"
- redirect="true" />
- <forward
- name="fail"
- path="/index.jsp"
- redirect="true" />
- </action>
那么在过滤company目录下的资源时候,company/login.do也会进行过滤,如果此时不做处理,则会出现死循环的现象
我是这样做的,但好像还是有一点不合理
- public void doFilter(ServletRequest arg0, ServletResponse arg1,
- FilterChain arg2) throws IOException, ServletException {
- // TODO Auto-generated method stub
- HttpServletRequest request = (HttpServletRequest) arg0;
- HttpServletResponse response = (HttpServletResponse) arg1;
- Object recored = request.getSession().getAttribute("info");
- System.out.println(recored);
- System.out.println(request.getRequestURI());
- if (!request.getRequestURI().equals("/cdsoft/company/login.do")) {
- if (recored == null) {
- response.sendRedirect("/index.jsp");
- }
- }
- arg2.doFilter(arg0, arg1);
- }
也可以在web.xml配置Filter初始化参数,在Filter中得到初始化参数,并进行处理
转载请注明出处
Author:Jack Zhang