手机扫码查看
filter过滤器
====================================
什么是过滤器:
Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,
对web服务器管理的所有web资源;例如Jsp,Servlet,静态图片文件或静态html文件等
进行拦截,从而实现一些特殊的功能。
例如实现URL级别的权限访问控制、过滤敏骂词汇、压缩响应信息等一些高级功能。
ServletAPI中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,
则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个
目标资源之间,对访问的请求和响应进行栏截.
如何编写过滤器:
1.编写java类实现Filter接口(servlet)
2.重写doFilter方法
public class TestFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
}
}
xml配置
在web.xml中进行过滤器的配置
<filter>
名称
<filter-name>sf<filter-name>
<filter-class>包名.类名<filter-class>
</filter>
映射路径配置
<filter-mapping>
名称
<filter-name>sf<filter-name>
过滤的url匹配规则和servlet的一模一样
<url-pattern>/*</url-pattern>
<filter-mapping>
====================================
Filter注解配置
注解式配置
在自定义的Filter类上使用注解@WebFilter(“/*”);
优先级
如果为注解的话,是按照类名的字符串顺序进行起作用的
如果web.xml,按照filter-mapping注册顺序,从上往下
web.xml配置高于注解方式
如果不同包、同名的filter,按照包名在排序
====================================
过滤器的初始化参数
在过滤器的创建的时候,可以传递初始化参数
第一种:基于注解的
@WebFilter(initParams={@WebInitParam(name=”version”,value=”1.0″)})
第二种:web.xml
<filter>
<init-param>
<param-name>version<param-name>
<param-value>1.0<param-value>
<init-param>
<filter>
过滤器优点
可以实现web应用程序中的预处理和后期处理逻辑
====================================
静态自动登录
loginServlet:
HttpSeesion s=request.getSession();
//收参
String uname=request.getParameter(“uname”);
String password=request.getParameter(“password”);
if(“admin”.equals(uname)&&”admin888″.equals(password)){
s.setAttribute(“uname”,uname);
Cookie cookie=new Cookie(“userinfo”,uname+”#”+password);
cookie.setPath(“/”);
cookie.setMaxAge(60*60*24*7);
response.addCookie(cookie);
response.sendRedirect(“/项目/欢迎页.html”);
}else{
response.sendRedirect(“/项目/bad.html”);
}
loginFilter:
@WebFilter(value=”/login.html”)
doFilter()方法{
//1.session里取session
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
HttpSeesion s=request.getSession();
String uname=(String)session.getAttribute(“uname”);
if(uname!=null){
response.sendRedirect(“/项目/欢迎页.html”);
}else{
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){
String names=cookie.getName();
//如果当前cookie里有userinfo的name、证明用户登录过
if(names.equals(“userinfo”)){
String value=cookie.getValue();
String[] split=value.split(“#”);
session.setAttribute(“uname”,split[0]);
response.sendRedirect(“/项目/欢迎页.html”);
}
}
}
}
//2.cookie取用户名和密码
chain.doFilter(req,resp);
}
====================================
动态自动登录
loginFilter:
@WebFilter(filterName = "LoginFilter",value = "/login.html")
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
HttpSession session = request.getSession();
Users users = (Users) session.getAttribute("users");
if (users != null) {
response.sendRedirect("/day2/home.html");
}else{
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
String name = cookie.getName();
if(name.equals("userinfo")){
String value = cookie.getValue();
String[] split = value.split("#");
UsersService us=new UsersServiceImpl();
Users users1 = us.checkUsers(split[0], split[1]);
if (users1 != null) {
response.sendRedirect("/day2/home.html");
}else{
response.sendRedirect("/day2/filed.html");
}
}
}
}chain.doFilter(request,response);
}
}
loginServlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
HttpSession session = request.getSession();
UsersServiceImpl usi=new UsersServiceImpl();
Users users = usi.checkUsers(username, password);
if (users != null) {
session.setAttribute("users",users);
session.setAttribute("username",username);
Cookie cookie=new Cookie("userinfo",username+"#"+password);
cookie.setPath("/");
cookie.setMaxAge(60*60*24*7);
response.addCookie(cookie);
response.sendRedirect("/day2/home.html");
}else{
response.sendRedirect("/day2/filed.html");
}
}
====================================
过滤脏词
dirtyServlet:
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request=(HttpServletRequest)req;
chain.doFilter(new dir(request), resp);
}
static class dir extends HttpServletRequestWrapper {
List<String> list=new ArrayList<String>();
public dir(HttpServletRequest request) {
super(request);
list.add("王八蛋");
list.add("二狗子");
list.add("sb");
list.add("SB");
}
@Override
public String getParameter(String name) {
String values = super.getParameter(name);
for (String s : list) {
if(values.equals(s)){
values="***";
}
}
return values;
}
}
====================================
设置编码
CharacterFilter:
@WebFilter(filterName = “CharacterFilter”,value = “/*”)
req.setCharacterEncoding(“UTF-8”);
resp.setCharacterEncoding(“UTF-8”);
resp.setContentType(“text/html;charset=utf-8”);
====================================
权限管理
1.首先写三层架构(dao、entity、service)以及登录页面
2.loginFilter:
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
HttpSession session = request.getSession();
Users users = (Users) session.getAttribute("users");
if (users != null) {
response.sendRedirect("/day2/home.html");
}else{
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
String name = cookie.getName();
if(name.equals("userinfo")){
String value = cookie.getValue();
String[] split = value.split("#");
UsersService us=new UsersServiceImpl();
Users users1 = us.checkUsers(split[0], split[1]);
if (users1 != null) {
if(users1.getAcc()==1){
response.sendRedirect("/day2/admin");
}else {
response.sendRedirect("/day2/getAll");
}
}else{
response.sendRedirect("/day2/filed.html");
}
}
}
}chain.doFilter(request,response);
}
}
3.loginServlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
UsersServiceImpl usi=new UsersServiceImpl();
Users users = usi.checkUsers(username, password);
if (users != null) {
Cookie cookie=new Cookie("userinfo",username+"#"+password);
cookie.setPath("/");
cookie.setMaxAge(60*60*24*7);
response.addCookie(cookie);
if(users.getAcc()==1) {
response.sendRedirect("/day2/admin");
}else{
response.sendRedirect("/day2/getAll");
}
}else{
response.sendRedirect("/day2/filed.html");
}
}
4.getAllServlet:
EmpService empService=new EmpServiceImpl();
List<Emp> allEmp = empService.getAllEmp();
PrintWriter writer = response.getWriter();
writer.println(“<html>”);
writer.println(“<head>”);
writer.println(“<meta charset=’utf-8′>”);
writer.println(“<title>查询所有</title>”);
writer.println(“</head>”);
writer.println(“<body>”);
for (Emp emp : allEmp) {
writer.println(“<div>”+emp.getId()+”\n”+emp.getUname()+”\n”+emp.getAge()+”\n”+emp.getSex()+”\n”+emp.getMobile()+”</div>”);
}
writer.println(“</body>”);
writer.println(“</html>”);
5.adminServlet:
EmpService empService=new EmpServiceImpl();
List<Emp> allEmp = empService.getAllEmp();
PrintWriter writer = response.getWriter();
writer.println(“<html>”);
writer.println(“<head>”);
writer.println(“<meta charset=’utf-8′>”);
writer.println(“<title>查询所有</title>”);
writer.println(“</head>”);
writer.println(“<body>”);
for (Emp emp : allEmp) {
writer.println(“<div>”+emp.getId()+”\n”+emp.getUname()+”\n”+emp.getAge()+”\n”+emp.getSex()+”\n”+emp.getMobile()+
“</div><a href=’#’>修改</a> <a href='”+”/day11/delete?no=”+emp.getId()+”‘>删除</a>”);
}
writer.println(“</body>”);
writer.println(“</html>”);
6.deleteServlet:
String no = request.getParameter(“no”);
EmpService empService=new EmpServiceImpl();
int delete = empService.delete(Integer.valueOf(no));
if (delete > 0) {
response.sendRedirect(“/day11/admin”);
}
====================================
- 本页地址 https://www.9713job.com/?p=2430
- 上一篇 <<2020Javaweb教程:servlet状态管理
- 下一篇 >>2020javaweb教程之JSP



发表回复