• java之Struts2实现用户登录过滤 Yannis


    在项目中难免遇到防止用户非法登录的问题。

    处理方式,在Web.xml中增加过滤器的配置

    <!-- 用户权限过滤器配置 -->
      <filter>
            <filter-name>MyFilter</filter-name>
            <filter-class>com.bohui.ipview.action.MyFilter</filter-class>
            <init-param>
                <param-name>LOGIN_URL</param-name>
                <param-value>/jsp/login.jsp</param-value>
            </init-param>
            <init-param>
                <param-name>HOME_URL</param-name>
                <param-value>/index.jsp</param-value>
            </init-param>
            <init-param>
                <param-name>CONTROL_URL</param-name>
                <param-value></param-value>
            </init-param>
            <init-param>
            	<param-name>LOAD_URL</param-name>
                <param-value>/jsp/window.jsp</param-value>
            </init-param>
       </filter>
       <filter-mapping>
            <filter-name>MyFilter</filter-name>
            <url-pattern>*.jsp</url-pattern>
       </filter-mapping>
       <filter-mapping>
            <filter-name>MyFilter</filter-name>
            <url-pattern>*.html</url-pattern>
       </filter-mapping>

    在具体的java类中代码如下:

    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    public class MyFilter implements Filter{
    
    	private static final String LOGIN_URL = "LOGIN_URL";// 用户登录的URL地址
    	private static final String HOME_URL = "HOME_URL";// 用户登录主页面的URL地址
    	private static final String CONTROL_URL = "CONTROL_URL";// server控制页面
    	private static final String LOAD_URL = "LOAD_URL";//下载页面
    	private String logon_page;
    	private String home_page;
    	private String control_page;
    	private String load_page;
    
    	/* server访问的URL路径 
    	 * */
    	@Override
    	public void destroy() {
    	}
    
    	@Override
    	public void doFilter(ServletRequest request, ServletResponse response,
    			FilterChain chain) throws IOException, ServletException {
    		HttpServletRequest req = (HttpServletRequest) request;
    		HttpServletResponse resp = (HttpServletResponse) response;
    		// 设置请求的参数
    		req.setCharacterEncoding("UTF-8");
    		resp.setContentType("text/html;charset=UTF-8");
    		// 设置session的超时时间
    		HttpSession session = req.getSession();
    		session.setMaxInactiveInterval(60 * 60 * 24);
    		PrintWriter out = resp.getWriter();
    		// 得到用户请求的URL
    		String request_uri = req.getRequestURI();
    		// 得到web应用程序的上下文环境
    		String ctxPath = req.getContextPath();
    		// 去除上下文路径,得到剩余部分的路径
    		String uri = request_uri.substring(ctxPath.length());
    		if (uri.equals(control_page)) {
    			chain.doFilter(request, response);
    			return;
    		}else if(uri.equals(load_page)){ 
    			chain.doFilter(request, response);
    			return;
    		}else if (uri.equals(logon_page)) {// 判断用户访问的是否是登录界面
    			// Filter只是链式处理,请求依然放行到目的地址
    			chain.doFilter(request, response);
    			return;
    		} else {
    			// 如果不是登录界面,判断用户是否已经登录
    			String username = (String)session.getAttribute("username");
    			String password = (String)session.getAttribute("password");
    			if (null != username && null != password) {
    				//System.out.println(person.getCode()+person.getPassword());
    				chain.doFilter(request, response);
    				return;
    			} else {
    				out.println("<script language=\"javaScript\">"
    						+ "parent.location.href='" + ctxPath + logon_page + "'"
    						+ "</script>");
    				return;
    
    			}
    		}
    
    	}
    
    	@Override
    	public void init(FilterConfig config) throws ServletException {
    		// 从部署描述符中获取登录页面和首页的URI
    		logon_page = config.getInitParameter(LOGIN_URL);
    		home_page = config.getInitParameter(HOME_URL);
    		control_page = config.getInitParameter(CONTROL_URL);
    		load_page = config.getInitParameter(LOAD_URL);
    		// System.out.println("logon_page:" + logon_page);
    		// System.out.println("home_page:" + home_page);
    		//System.out.println("control_page:" + load_page);
    		if (null == logon_page || null == home_page ) {
    			throw new ServletException("没有找到登录页面!");
    		}
    	}
    
    }
    
    这样的话,即可达到预期效果。


    人生苦短,我用python
  • 相关阅读:
    arcgis server 9.2代码阅读笔记一:在图层中增加一个点
    mapx+vb实战摘要
    F# 程式設計入門 (1)
    arcgis server 9.2代码阅读笔记二:在页面上动态加载图层
    F#维基百科,自由的百科全书(重定向自F#)
    用VC++进行MapX二次开发
    sdsalea process in sd
    abap关于sap地址,传真,邮箱的地址读取
    SDEnterprise Structure Configuration
    ABAP通过LDB_PROCESS函数使用逻辑数据库
  • 原文地址:https://www.cnblogs.com/pigga/p/10098351.html
Copyright © 2020-2023  润新知