javaWeb之利用Filter(过滤器)实现用户访问权限)

自定义的过滤器

package bzu.cn.mvcproject.filter;

import java.io.IOException;

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;

public class HttpFilter implements Filter{
	
	private FilterConfig filterConfig;
	public FilterConfig getFilterConfig() {
		return this.filterConfig;
	}
	@Override
	public void destroy() {
		
		
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
			throws IOException, ServletException {
		doFilter((HttpServletRequest)req,(HttpServletResponse)resp,chain);
		
	}
	protected void doFilter(HttpServletRequest req,HttpServletResponse resp,FilterChain chain) {
		
	}
	@Override
	public void init(FilterConfig filterconfig) throws ServletException {
		this.filterConfig = filterconfig;
		init();
	}
	protected void init() {
		
	}
}

实现访问权限的代码

package bzu.cn.mvcproject.filter;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class IsLoginFilter extends HttpFilter {
	@Override
	protected void doFilter(HttpServletRequest req, HttpServletResponse resp, FilterChain chain) {
		String path = req.getServletPath();
		path = path.substring(1);
		//有权限访问的页面
		String authority = getFilterConfig().getInitParameter("authority");
		//没有权限访问的页面
		String noAuthority = getFilterConfig().getInitParameter("noAuthority");
		String[] strArr = authority.split(",");
		String[] strArr2 = noAuthority.split(",");
		HttpSession session = req.getSession();
		for (String str : strArr2) {
			if (str.equals(path)) {
				try {//如果是没有设置访问权限的路径,则调用下一个过滤器
					chain.doFilter(req, resp);
				} catch (IOException | ServletException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		for (String str : strArr) {
			if (str.equals(path)) {
				String user = (String) session.getAttribute("user");
				if (user != null) {//如果用户已经登录
					try {
						//如果用户已经登录,则设置访问权限的路径调用下一个过滤器
						chain.doFilter(req, resp);
					} catch (IOException | ServletException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				} else {
					try {
						//没有没有登录,则跳转到登录页面
						resp.sendRedirect(req.getContextPath() + "/login.jsp");
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
	}

	@Override
	protected void init() {

	}
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	id="WebApp_ID" version="3.1">
	<display-name>mvcproject</display-name>
	
	<filter>
		<filter-name>IsLoginFilter</filter-name>
		<filter-class>bzu.cn.mvcproject.filter.IsLoginFilter</filter-class>
		<init-param>
			<param-name>authority</param-name><!-- 有访问权限的 -->
			<param-value>index.jsp,add.jsp,update.jsp,query.udo,add.udo,update.udo,del.udo,updatedo.udo</param-value>
		</init-param>
		<init-param>
			<param-name>noAuthority</param-name><!-- 没有访问权限的 -->
			<param-value>login.jsp,logout.udo,login.udo,getOnline.udo,online.jsp</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>IsLoginFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

过滤器的基础知识请看这篇博客 JavaWeb之过滤器或拦截器(filter)

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Filter来过滤JavaWeb应用中的文字。FilterJavaWeb应用中的组件,用于拦截请求和响应,对它们进行预处理和后处理。可以利用Filter来过滤敏感词汇、限制请求频率等。以下是一个简单的过滤器示例: ```java import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class TextFilter implements Filter { private String[] words; // 敏感词汇数组 @Override public void init(FilterConfig filterConfig) throws ServletException { String wordsStr = filterConfig.getInitParameter("words"); // 从web.xml中获取敏感词汇列表 words = wordsStr.split(","); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; // 获取请求参数 String text = req.getParameter("text"); // 进行过滤 for (String word : words) { if (text.contains(word)) { // 如果包含敏感词汇,则返回错误信息 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "含有敏感词汇:" + word); return; } } // 如果不包含敏感词汇,则继续处理请求 chain.doFilter(request, response); } @Override public void destroy() { // 可以在这里释放资源 } } ``` 在web.xml中配置过滤器: ```xml <filter> <filter-name>textFilter</filter-name> <filter-class>com.example.TextFilter</filter-class> <init-param> <param-name>words</param-name> <param-value>敏感词1,敏感词2,敏感词3</param-value> </init-param> </filter> <filter-mapping> <filter-name>textFilter</filter-name> <url-pattern>/text/*</url-pattern> </filter-mapping> ``` 这样,当用户发送包含敏感词汇的请求时,过滤器会拦截请求并返回错误信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值