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. ReactiveCocoa入门-part1

    作为一个iOS开发者,你写的每一行代码几乎都是在响应某个事件,例如按钮的点击,收到网络消息,属性的变化(通过KVO)或者用户位置的变化(通过CoreLocation).但是这些事件都用不同的方式来处理 ...

  2. 转 救命的教程 anaconda下载安装包网络错误的解决办法

    折腾了一天,终于找到了这个解决办法 https://blog.csdn.net/sinat_29315697/article/details/80516498

  3. [LUOGU]P1508 Likecloud-吃、吃、吃

    题目背景 问世间,青春期为何物? 答曰:"甲亢,甲亢,再甲亢:挨饿,挨饿,再挨饿!" 题目描述 正处在某一特定时期之中的李大水牛由于消化系统比较发达,最近一直处在饥饿的状态中.某日 ...

  4. C语言中的32个关键字

    C语言中的32个关键字 数据类型关键字(12个) (1)     char:声明字符型变量或函数 (2)     double:声明双精度变量或函数 (3)     enum:声明美剧类型 (4)   ...

  5. destoon 列表页面增加手动选择排序方式

    在mobile/include/mall.inc.php  行60  $order = $MOD['order']; 之前增加 排序方式判断 如果有order参数则$order接受参数,没有就用默认  ...

  6. ccf 201803-1 跳一跳(Python实现)

    一.原题 问题描述 试题编号: 201803-1 试题名称: 跳一跳 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱. 简化 ...

  7. 【android】【android studio】修改emulator的本地化环境

    Changing the emulator locale from the adb shell To change the locale in the emulator by using the ad ...

  8. Html5_标签

    HTML 1.一套规则,浏览器认识的规则. 2.开发者: 学习Html规则 开发后台程序: - 写Html文件(充当模板的作用) ****** - 数据库获取数据,然后替换到html文件的指定位置(W ...

  9. 彻底卸载gedit

    $ sudo  apt-get  purge gedit gedit-plugins$ sudo apt-get autoremove

  10. selenium2-元素管理方式及解析

    1.管理文件格式:yaml 2.Yaml里面的内容格式:   3.格式说明: baidu_input后面接上":",直接回车,然后空两格 type与value这两个key是固定 ...