您的位置:首页 > 其它

过滤器Filter的使用(以登录为例子)

2017-05-22 16:02 423 查看
使用过滤器步骤:

(1)在web.xml文件中添加过滤器(以下例子是过滤多个请求)

<!-- 用户登录过滤 -->
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.learning.filter.loginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/classes/classesPageInfo.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/note/notePageInfo.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/ask/asksPageInfo.do</url-pattern>
</filter-mapping>


(2)过滤器类

package com.learning.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;
import javax.servlet.http.HttpSession;

public class loginFilter implements Filter{
private String encoding;

@Override
public void destroy() {
// TODO Auto-generated method stub

}

@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
HttpSession session = request.getSession();
String loginName = (String) session.getAttribute("loginName");
//判断当前用户是否已经登录,若未登录跳到登录页面
if (loginName == null || loginName=="") {
String goUrl = request.getRequestURL().toString() + "?" +request.getQueryString().toString();
session.setAttribute("goUrl", goUrl);
request.getRequestDispatcher("/user/log.jsp").forward(request, response);
return ;
} else {
filterChain.doFilter(req, resp);
}
}

@Override
public void init(FilterConfig filterConfig) throws ServletException {
encoding = "utf-8";
}

}


注:这个主要的作用是将过滤前的地址记录下来,登录成功之后跳转到过滤前的页面

String goUrl = request.getRequestURL().toString() + "?"+request.getQueryString().toString();
session.setAttribute("goUrl", goUrl);


(3)登录页面的form表单代码

<form action="<%=path%>person/dologin.do" name="loginform"
accept-charset="utf-8" id="login_form" class="loginForm"
method="post">
<input type="hidden" name="did" value="0" /> <input type="hidden"
name="to" value="log" />
<div class="uinArea" id="uinArea">
<label class="input-tips" for="u">账号:</label>
<div class="inputOuter" id="uArea">

<input type="text" id="u" name="username" class="inputstyle" />
</div>
</div>
<div class="pwdArea" id="pwdArea">
<label class="input-tips" for="p">密码:</label>
<div class="inputOuter" id="pArea">

<input type="password" id="p" name="password"
class="inputstyle" />
</div>
</div>
<div style="padding-left:50px;margin-top:20px;">
<input type="submit" value="登 录" style="width:150px;"
class="button_blue" />
</div>
</form>


(4)登录表单提交后通过action跳到控制层,并根据情况跳到不同的地方

// 用户登录
@RequestMapping("/dologin.do")
public String doLogin(@RequestParam("username") String username,
@RequestParam("password") String password, HttpSession session) {
Map param = new HashMap();
param.put("loginName", username);
param.put("loginPwd", password);
// 判断用户是否存在
User user = personServiceImpl.findUserInfo(param);
session.setAttribute("loginName", user.getLoginName());
session.setAttribute("userPower", user.getUserPower());
String goUrl = (String) session.getAttribute("goUrl");
if (goUrl != null) {
return "redirect:" + goUrl;
}
return "redirect:/mainpage/tomainpage.do";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: