单应用登录过滤器
判断 url 是否为 登录页面,是则放行
否:获取session,存在 放行,不存在拦截
2. 税务系统登录:
public class LoginFilter implements Filter { @Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpServletResponse response = (HttpServletResponse)servletResponse;
String uri = request.getRequestURI();
//判断当前请求地址是否是登录的请求地址
if(!uri.contains("sys/login_")){
//非登录请求
if(request.getSession().getAttribute(Constant.USER) != null){
//说明已经登录过
//判断是否访问纳税服务系统
if(uri.contains("/nsfw/")){
//访问纳税服务子系统
User user = (User)request.getSession().getAttribute(Constant.USER);
//获取spring容器
WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
PermissionCheck pc = (PermissionCheck)applicationContext.getBean("permissionCheck");
if(pc.isAccessible(user, "nsfw")){
//说明有权限,放行
chain.doFilter(request, response);
} else {
//没有权限,跳转到没有权限提示页面
response.sendRedirect(request.getContextPath() + "/sys/login_toNoPermissionUI.action");
}
} else {
//非访问纳税服务子系统,则直接放行
chain.doFilter(request, response);
}
} else {
//没有登录,跳转到登录页面
response.sendRedirect(request.getContextPath() + "/sys/login_toLoginUI.action");
}
} else {
//登录请求;直接放行
chain.doFilter(request, response);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
3. 电力系统登录拦截
public class SystemFilter implements Filter { //存放系统没有Session,但是需要访问的url,像这样的连接需要放行
List<String> list = new ArrayList<String>();
/**当服务启动的时候初始化*/
public void init(FilterConfig config) throws ServletException {
list.add("/index.jsp");
list.add("/image.jsp");
list.add("/system/elecMenuAction_menuHome.do");
list.add("/error.jsp");
list.add("/system/elecMenuAction_logout.do");
}
/**每次访问URL连接之前,都要访问的方法*/
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
//记住我的代码放置到过滤器中
String path = request.getServletPath();
this.forwordIndexPage(request,path);
//如果当前访问的连接是定义list中存放的连接,此时需要放行
if(list.contains(path)){
chain.doFilter(request, response);
return;
}
//存在Session(不为空)的时候要放行,Session为空的时候,定向到首页
ElecUser elecUser = (ElecUser)request.getSession().getAttribute("globle_user");
if(elecUser!=null){
//从数据库中查询获取登录状态
WebApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
IElecUserService elecUserService = (IElecUserService)ac.getBean(IElecUserService.SERVICE_NAME);
ElecUser user = elecUserService.findElecUserByID(elecUser);
Long logonStateDb = user.getLogonState();
//从Session中查询登录状态
Long logonState = elecUser.getLogonState();
if(logonStateDb.equals(logonState)){
chain.doFilter(request, response);
return;
}
else{
request.setAttribute("errorMsg", "您的账号已经在异地登录,换句话说,您被踢了!");
}
}
//重定向,由于传递request作用域失效
// response.sendRedirect(request.getContextPath()+"/error.jsp");
//转发
request.getRequestDispatcher("/error.jsp").forward(request, response);
}
/**销毁*/
public void destroy() {
}
//记住我的代码放置到过滤器中,在跳转到index.jsp页面之前
private void forwordIndexPage(HttpServletRequest request, String path) {
if(path.equals("/index.jsp")){
String name = "";
String password = "";
String checked = "";
Cookie [] cookies = request.getCookies();
if(cookies!=null && cookies.length>0){
for(Cookie cookie:cookies){
if(cookie.getName().equals("name")){
name = cookie.getValue();
//处理中文二进制解码问题
try {
name = URLDecoder.decode(name, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
checked = "checked";
}
if(cookie.getName().equals("password")){
password = cookie.getValue();
}
}
}
request.setAttribute("name", name);
request.setAttribute("password", password);
request.setAttribute("checked", checked);
}
}
}
拦截器拦截 url :
<!-- 自定义过滤器,要放置到struts2的过滤器的上面 --> <filter>
<filter-name>SystemFilter</filter-name>
<filter-class>cn.itcast.elec.util.SystemFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SystemFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.do</url-pattern>
</filter-mapping>
以上是 单应用登录过滤器 的全部内容, 来源链接: utcz.com/z/512869.html