在Java Filter 中注入 Service方案一
2016-09-30 15:40
459 查看
新建一个类
web.xml配置
java代码
package com.fulihui.yiyuanservice.common.util; import javax.annotation.PostConstruct; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ApplicationObjectSupport; import org.springframework.stereotype.Component; /** * Spring ApplicationContext工具,类通过 {@link Component}注解注入到bean容器, * 初始化时调用init方法,将ApplicationContext赋值到静态变量instance上。 * @author Created by Willard.Hu on 2016/8/12 0012. */ @Component public class ApplicationContextUtil extends ApplicationObjectSupport { private static ApplicationContext instance; public static ApplicationContext getContext() { return instance; } @PostConstruct private void init() { instance = getApplicationContext(); } }
web.xml配置
<!--配置过滤器--> <filter> <filter-name>AuthenticationLoginFliter</filter-name> <filter-class>com.fulihui.yiyuanservice.web.filter.AuthenticationLoginFliter</filter-class> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <!-- 映射过滤器 --> <filter-mapping> <filter-name>AuthenticationLoginFliter</filter-name> <!-- “/*”表示拦截所有的请求 --> <url-pattern>/*</url-pattern> </filter-mapping>
java代码
package com.fulihui.yiyuanservice.web.filter; import java.io.IOException; import javax.inject.Inject; 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; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import com.fulihui.yiyuanservice.biz.shard.AuthBizManager; import com.fulihui.yiyuanservice.common.util.AppConfig; import com.fulihui.yiyuanservice.common.util.ApplicationContextUtil; import com.fulihui.yiyuanservice.common.util.SessionContext; import com.fulihui.yiyuanservice.common.util.SessionUtil; import com.fulihui.yiyuanservice.domain.ExternalUser; /** * 登陆认证 * @time 2016-9-30 10:50 * @author hongwang.zhang * */ public class AuthenticationLoginFliter implements Filter { /* logger */ private static final Logger log = LoggerFactory.getLogger(AuthenticationLoginFliter.class); private AuthBizManager authBizManager; private AppConfig appConfig; @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub ApplicationContext context = ApplicationContextUtil.getContext(); appConfig = context.getBean(AppConfig.class); authBizManager = context.getBean(AuthBizManager.class); System.out.println("初始化 来咯。。。。。。。。。。。。。。"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { try { HttpServletRequest httpRequest=(HttpServletRequest)request; HttpServletResponse httpResponse=(HttpServletResponse)response; SessionUtil.setSession(httpRequest.getSession()); HttpSession session = httpRequest.getSession(); String path = httpRequest.getServletPath(); if (session.getAttribute("user") == null || session.getAttribute("userId") == null){ //判断是否为拦截页面true 放行 if (!authBizManager.needAuth(path)) { String userId = authBizManager.getUserId(httpRequest); if(StringUtils.isNotEmpty(userId)){ ExternalUser user = authBizManager.getUserInfo(httpRequest, userId); }else{ chain.doFilter(httpRequest, httpResponse); } } else { String userId = authBizManager.getUserId(httpRequest); if(StringUtils.isEmpty(userId)){ String redirect = authBizManager.getRedirectPath(httpRequest); httpResponse.sendRedirect(redirect); }else{ ExternalUser user = authBizManager.getUserInfo(httpRequest, userId); if(user==null){ Modeladnview(httpRequest,httpResponse); chain.doFilter(httpRequest, httpResponse); } } } }else { Modeladnview(httpRequest,httpResponse); chain.doFilter(httpRequest, httpResponse); /* // 获取信息 String userId =session.getAttribute("userId")==null?"":session.getAttribute("userId").toString(); ExternalUser user = authBizManager.getUserInfo(httpRequest, userId); if(user==null){ Modeladnview(httpRequest,httpResponse); chain.doFilter(httpRequest, httpResponse); }else{ Modeladnview(httpRequest,httpResponse); chain.doFilter(httpRequest, httpResponse); }*/ } /* String userId = authBizManager.getUserId(httpRequest); if(StringUtils.isEmpty(userId)){ String redirect = authBizManager.getRedirectPath(httpRequest); httpResponse.sendRedirect(redirect); }*/ } catch (Exception e) { e.printStackTrace(); } } public void Modeladnview(HttpServletRequest httpServletRequest,HttpServletResponse httpResponse){ ExternalUser user = SessionContext.getExternalUser(httpServletRequest); String isLogin = null; if (user != null) { if (StringUtils.isEmpty(user.getUserId())) { isLogin = "0"; } else { isLogin = "1"; } } else { isLogin = "0"; } httpServletRequest.setAttribute("isLogin", isLogin); httpServletRequest.setAttribute("curUser", user); } @Override public void destroy() { // TODO Auto-generated method stub } public static void main(String[] args) { System.out.println(StringUtils.isEmpty(null)); } }
相关文章推荐
- 如何在Java Filter 中注入 Service
- WinAPI【远程注入】三种注入方案
- 使用dubbo时报错:注入service出错BeanCreationException: Error creating bean with name。。。
- SpringMVC项目中偶尔用到servlet,如何在servlet中注入service笔记
- 报表性能优化方案之善用参数注入
- spring 通过配置向quartz 注入service
- 整合strust2和spring的关键点(为action注入service)
- spring quartzy的spring注入问题(dao层和service层)
- 原来Spring定时器可以这样注入service
- [转]宝文!Apple Push Notification Service (APNS)原理与实现方案
- Jax-ws 开发webService ,并使用spring注入service类中遇到 空指针
- 【Spring】Service 注入失败,空指针
- 8个类搞定插件化——Service实现方案
- CXF WebService+Spring 无法注入问题解决方法
- spring整合mybatis时报空指针异常:service注入得不到Mapper接口的实例化对象(已解决)
- quartz定时任务service注入失败
- servlet中怎么注入service
- 关于spring boot自动注入出现Consider defining a bean of type 'xxx' in your configuration问题解决方案
- java反射 -- 通过反射注入service/dao,进行UT测试
- 轻的,谁都会写的Service方案--REST与JSON