package com.erichfund.cljjfof.server.util;

import java.io.IOException;

/**
* @author 作者 zhuzhengquan:
* @version 创建时间:2016年11月21日 下午6:49:26
* 类说明
*/
public class WebAuthFilter implements Filter {
private String errorPage;
private Configuration cfg = null; @Override
public void init(FilterConfig filterConfig) throws ServletException {
errorPage = filterConfig.getInitParameter("errorPage");
} @Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse)response;
if(WebUserSession.getUserSession()== null ){
if(req.getRequestURI().startsWith("/ajax1....") ||
req.getRequestURI().startsWith("/ajax2...")){ // 弹框登录
}else{ // URL跳转
String method = req.getMethod();
String returnUrl ;
if(method.equals("GET")){
returnUrl = "/webfof_login/login?service=" + URLEncoder.encode("get " + req.getRequestURI() + (StringUtils.hasText(req.getQueryString())?"?"+req.getQueryString():""),"utf-8");
}else if(method.equals("POST")){
String host="";
String path = req.getRequestURI() + (StringUtils.hasText(req.getQueryString())?"?"+req.getQueryString():"");
MultivaluedMap<String,String> formParams = FormUrlEncodedProvider.parseForm(req.getInputStream());
Map<String,Object> data = new HashMap<String,Object>();
data.put("host", host);
data.put("path", path);
data.put("formParams", formParams);
String url = JsonUtil.serializeToJson(data);
returnUrl = "/webfof_login/login?service=" + URLEncoder.encode("post " + url,"utf-8");
}else{
throw new RuntimeException("not support "+method);
}
res.sendRedirect(returnUrl);//LCK login.jsp
}
return;
}else{
String uri = ((HttpServletRequest)request).getRequestURI();
IAuthService authService = EnviromentUtil.getWebApplicationContext().getBean(IAuthService.class);
boolean hasOperatePrivilege = authService.hasOperatePrivilege(UserSession.getUserSession().getOpid(), uri);
if(!hasOperatePrivilege){
cfg = new Configuration();
cfg.setServletContextForTemplateLoading(request.getServletContext(), null); // 创建数据模型
Map<String,String> dataMap = new HashMap<String,String>();
dataMap.put("msg", "您无权访问此链接");
Template template = cfg.getTemplate(errorPage);
PrintWriter out = res.getWriter();
try {
template.process(dataMap, out);
} catch (TemplateException e) {
e.printStackTrace();
}
out.flush();
// request.setAttribute("msg", "您无权访问此链接");//存储业务异常信息类
// request.getRequestDispatcher(errorPage).forward(request, response);//跳转到信息提示页面!!
return;
} }
chain.doFilter(request, response);
} @Override
public void destroy() {
// TODO Auto-generated method stub } }

Filter里面实现未登录跳转,已登录权限判断的更多相关文章

  1. vue 判断是否登录,未登录跳转到登录页

    网页一进入判断是否登录,未登录跳转到登录页面 router.js export default new Router({ routes: [ { path: '/', name: 'HelloWorl ...

  2. SSM登录跳转到登录页,登录页不能加载js和样式

    SSM登录跳转到登录页,登录页不能加载js和样式选用jsppage添加根路径. <% String rootPath = request.getContextPath(); %> < ...

  3. vue实现未登录跳转到登录页面

    环境:vue 2.9.3; webpack;vue-router 目的:实现未登录跳转 例子:直接在url地址栏输入...../home,但是这个页面要求需要登陆之后才能进入,判断的值就通过登陆之后给 ...

  4. mvc未登录跳转到登录界面

    编写一个mvc控制器基类BaseController , 其继承自controller 重写其OnActionExecuting方法, 在其中检测session值,如果没有,则跳转至登录页面. 如下

  5. Vue-router路由判断页面未登录跳转到登录页面

    router.beforeEach((to, from, next) => { if (to.matched.some(record => record.meta.requireAuth) ...

  6. Vue-router路由判断页面是否登录,未登录跳转到登录页面

    在index.js中 //定义路由 const router = new Router({ routes, strict: process.env.NODE_ENV !== 'production', ...

  7. javaweb关于用户是否登录全局判断,没有登录跳转到登录界面

    有这样一个需求,用户密码登录网站,在session中保留了用户的信息,但是用户很长时间没有再操作该界面,用户的session则被浏览器清除,而一些业务逻辑则是需要用到用户的信息,那么用户再执行操作后, ...

  8. Django(十三)状态保持 —— cookie与session+ajax异步请求+session记住登录状态+cookie记住登录名密码

    一.状态保持的概述 http协议是无状态的.下一次去访问一个页面时并不知道上一次对这个页面做了什么.因此引入了cookie.session两种方式来配合解决此问题. Duplicate entry:重 ...

  9. SpringSecurity兑现多登录成功页面和登录成功返回被拦截界面

    SpringSecurity实现多登录成功页面和登录成功返回被拦截界面 使用SrpingSceurity作为认证和授权的安全框架可以省下很多基础工作. 具体可以参考SpringSecurity,这里不 ...

  10. Filter实现session超时自动跳转到login页,超过试用期不许登录

    新建一个过滤器 package com.autumn.filter; import com.autumn.pojo.Users; import javax.servlet.*; import java ...

随机推荐

  1. vs2015驱动开发中使用RtlStringCchPrintfW()报错

    法一: 在头顶添加一段代码 #pragam comment(lib,"xxxxxx.lib") 法二: 右击工程点属性,选择Linker下的Input,在依赖项后面写上$(DDK_ ...

  2. HTML5语义

    语义通俗化为意义,也就是语义化的元素等于意义化的元素,看到这个元素的名称,就知道这个元素的意义,是拿来做什么用的,这就是HTML5的一个新特性,一个具有语义化的元素能够清楚的把元素的意义告诉浏览器和开 ...

  3. 监测UITextField的变化

    监测UITextField的变化可以为UIControlEventEditingChanged事件添加target. 我们有时候会需要用到这个需求:输入框输入文本超过xx长度,不再允许输入其他内容! ...

  4. 扫雷游戏 NOIP(入门)

    题目描述: 扫雷游戏是一款十分经典的单机小游戏.它的精髓在于,通过已翻开格子所提示的周围格地雷数,来判断未翻开格子里是否是地雷. 现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格的周围格地雷 ...

  5. JS节点操作(JS原生+JQuery)

    JavaScript与JQuery节点操作   节点关系与类型 任何HTML元素,都有nodeType属性.值有1~12,常用的有: 1.元素节点 2.文本节点 8.注释节点 9.document节点 ...

  6. settings.py常规配置项

    settings.py常见配置项 1. 配置Django_Admin依照中文界面显示 LANGUAGE_CODE = 'zh-hans' 2. 数据库配置(默认使用sqlite3) 使用MySQL的配 ...

  7. JAVA基础篇—文件与流

    处理字节流的抽象类 InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等. OutputStream是字节输出流的所有类的超类,一般我们使用它的 ...

  8. 线段树:CDOJ1597-An easy problem C(区间更新的线段树)

    An easy problem C Time Limit: 4000/2000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Pr ...

  9. WPF触控程序的开发(一)——有用的资源

    迟来的一篇博文,每次都要撞到月末,这个月实在太忙了,除了在公司上班,还接了个单子,用wpf做一个触屏软件,类似iphone的相册功能.先说搭建开发环境吧,我是不可能去买个平板来的,再说基于win7的程 ...

  10. CSS动画小结

    CSS动画 原理:1.画面之间变化  2.视觉暂留作用 常见问题 1.CSS 动画的实现方式有几种 1.transition  2. keyframes(animation) 2.过渡动画和关键帧动画 ...