检测是否登录 否的话返回登录页面

10 篇文章 0 订阅

使用的是servlet的过滤器

web.xml(过滤所有JSP页面)

	<filter>
		<filter-name>CheckLoginFilter</filter-name>
		<filter-class>com.Servlet.CheckLoginFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>CheckLoginFilter</filter-name>
	
		<url-pattern>*.jsp</url-pattern>
 
	</filter-mapping> <!---->

对应的action

package com.Servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

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;

import org.apache.struts2.ServletActionContext;

/**
 * 用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面
 * 
 * 
 * 配置参数
 * 
 * 
 * checkSessionKey 需检查的在 Session 中保存的关键字
 * 
 * redirectURL 如果用户未登录,则重定向到指定的页面,URL不包括 ContextPath
 * 
 * notCheckURLList 不做检查的URL列表,以分号分开,并且 URL 中不包括 ContextPath
 * 
 */
public class CheckLoginFilter implements Filter {
	protected FilterConfig filterConfig = null;
	private String redirectURL = null;
	private List notCheckURLList = new ArrayList();
	private String sessionKey = null;

	public void doFilter(ServletRequest servletRequest,
			ServletResponse servletResponse, FilterChain filterChain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) servletRequest;
		HttpServletResponse response = (HttpServletResponse) servletResponse;
		HttpSession session = request.getSession();
		String username = String.valueOf(session.getAttribute("username"));
		// System.out.println("" + username.length());
		// System.out.println("." + username + ".");
		if (username.equals("null")) {
			// System.out.println("空");
			response.sendRedirect(redirectURL);
			// request.getRequestDispatcher("logout.action").forward(request,
			// response);

			return;
		} else {
		}
		filterChain.doFilter(servletRequest, servletResponse);
	}

	public void destroy() {
		notCheckURLList.clear();
	}

	private boolean checkRequestURIIntNotFilterList(HttpServletRequest request) {
		String uri = request.getServletPath()
				+ (request.getPathInfo() == null ? "" : request.getPathInfo());
		return notCheckURLList.contains(uri);
	}

	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterConfig = filterConfig;
		redirectURL = "logout.action";
		sessionKey = "";
		String notCheckURLListStr = "Login.jsp";

		if (notCheckURLListStr != null) {
			StringTokenizer st = new StringTokenizer(notCheckURLListStr, ";");
			notCheckURLList.clear();
			while (st.hasMoreTokens()) {
				notCheckURLList.add(st.nextToken());
			}
		}
	}
}


有几部分代码是没有用的。。。


/******************************/

以上可以过滤掉JSP文件,但是过滤不了struts的action,解决方法为,把web.xml中的struts过滤器和自定义过滤器交换位置,即可。

处理登录和包含验证码的登录过程通常涉及以下几个步骤,这里以简单的模拟示例说明: 1. **登录页面解析**: - 如果网站提供API或HTML结构固定,可以直接分析登录页的HTML元素找到用户名和密码输入框、验证码图片链接以及提交按钮的位置。可以使用BeautifulSoup或Selenium这类库帮助解析。 2. **验证码识别**: - 对于静态验证码,可能是数字或字母组合,可以保存图片,使用OCR(Optical Character Recognition,光学字符识别)技术识别,例如使用Tesseract。 - 动态验证码通常需要用户手动输入,这时可能会有时间限制。如果验证码是滑动拼图或其他动态形式,可能需要用户手动操作,或者使用专门的第三方服务(如极验、腾讯云等)提供的API。 3. **登录数据准备**: - 创建包含用户名、密码和验证码值的字典(如果有动态验证码,此时也需要包括识别后的验证码字符串)。 4. **发送登录请求**: - 使用`requests`库发起POST请求,将准备好的数据作为请求体,并指定相应的头信息,如`Content-Type`为`application/x-www-form-urlencoded`,模拟浏览器行为。 ```python url = "https://example.com/login" data = {"username": "your_username", "password": "your_password", "captcha": captcha_value} response = requests.post(url, data=data) ``` 5. **处理响应**: - 登录成功的话,服务器会跳转到主页或者返回特定的响应码(比如302)。如果收到错误消息或状态码异常,表示登录失败,可能需要检查验证码是否正确或用户名密码是否有误。 6. **自动化保护**: - 为了避免被识别为机器人,一些网站可能会对登录频率做限制,或者检测IP地址,这时需要添加延迟或代理IP的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值