ssh中自定义监听器,拦截器,过滤器
路由器SSH配置详解

Cisco路由器的SSH配置详解Cisco路由器的SSH配置详解如果你一直利用Telnet控制网络设备,你可以考虑采用其他更安全的方式。
本文告诉你如何用SSH替换Telnet.使用Telnet这个用来访问远程计算机的TCP/IP协议以控制你的网络设备相当于在离开某个建筑时大喊你的用户名和口令。
很快地,会有人进行监听,并且他们会利用你安全意识的缺乏。
SSH是替代Telnet和其他远程控制台管理应用程序的行业标准。
SSH命令是加密的并以几种方式进行保密。
在使用SSH的时候,一个数字证书将认证客户端(你的工作站)和服务器(你的网络设备)之间的连接,并加密受保护的口令。
SSH1使用RSA加密密钥,SSH2使用数字签名算法(DSA)密钥保护连接和认证。
加密算法包括Blowfish,数据加密标准(DES),以及三重DES(3DES)。
SSH保护并且有助于防止欺骗,“中间人”攻击,以及数据包监听。
实施SSH的第一步是验证你的设备支持SSH.请登录你的路由器或交换机,并确定你是否加载了一个支持SSH的IPSec IOS镜像。
在我们的例子中,我们将使用Cisco IOS命令。
运行下面的命令:Router> Show flash该命令显示已加载的IOS镜像名称。
你可以用结果对比你的供应商的支持特性列表。
在你验证了你的设备支持SSH之后,请确保设备拥有一个主机名和配置正确的主机域,就像下面的一样:Router> config terminalRouter (config)# hostname RouterRouter (config)# ip domain-name 在这个时候,你就可以启用路由器上的SSH服务器。
要启用SSH服务器,你首先必须利用下面的命令产生一对RSA密钥:Router (config)# crypto key generate rsa在路由器上产生一对RSA密钥就会自动启用SSH.如果你删除这对RSA密钥,就会自动禁用该SSH服务器。
SSH全注解

SSH全注解1、创建web工程,添加SSH支持注意:需要勾上Enable Hibernate Annotations Support2、修改xml配置文件 1)添加上下文参数2)添加监听器3)配置openSessionInView过滤器代码清单如下3、配置applicationContext.xml 1)添加命名空间2)添加注解支持以及包浏览3)配置spring事务管理器4) 配置annotation-driven5)配置hibernateTemplate模板4、删除冲突包antlr2.7.2.jar5、生成pojo类6、编写dao7、编写biz8、编写action实现接口@Repository("empDao")publicclass CommonDaoImpl<T>implements ICommonDao<T> {//定义hibernate模板private HibernateTemplate hibernateTemplate;@Resourcepublicvoid setHibernateTemplate(HibernateTemplate hibernateTemplate) {this.hibernateTemplate = hibernateTemplate;}@Overridepublic List<T> list(String hql) {returnthis.hibernateTemplate.find(hql);}@Overridepublic Serializable save(T t) {returnthis.hibernateTemplate.save(t);}@Overridepublicvoid delete(T o) {this.hibernateTemplate.delete(o);}@Overridepublic T get(Class<T> clazz, Serializable id) {returnthis.hibernateTemplate.get(clazz, id);}@Overridepublicvoid update(T o) {this.hibernateTemplate.update(o);}业务接口publicinterface IEmpBiz {public List<Emp> findEmpAll();/*** 增加员工的方法*/publicboolean addEmp(Emp emp);/*** 删除用户* @param empno* @return*/publicboolean removeEmp(short empno);/*** 按员工编号查询员工信息* @param empno* @return*/public Emp findEmpById(short empno);/*** 修改员工信息* @param emp* @return*/publicboolean updateEmp(Emp emp);实现业务接口@Service("empBiz")@Transactionalpublicclass EmpDaoImpl implements IEmpBiz {private ICommonDao<Emp>empDao;@Resourcepublicvoid setEmpDao(ICommonDao<Emp> empDao) {this.empDao = empDao;}@Override@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)public List<Emp> findEmpAll() {returnthis.empDao.list("from Emp");}@Overridepublicboolean addEmp(Emp emp) {Serializable id=this.empDao.save(emp);if(id!=null){returntrue;}returnfalse;}@Transactional(rollbackFor=ng.Exception.class,propagation=Pro pagation.REQUIRED)publicboolean removeEmp(short empno) {Emp emp=this.empDao.get(Emp.class,empno);try {this.empDao.delete(emp);returntrue;} catch (Exception e) {e.printStackTrace();}returnfalse;}@Transactional(propagation=Propagation.NOT_SUPPORTED)@Overridepublic Emp findEmpById(short empno) {returnthis.empDao.get(Emp.class,empno);}@Transactional(rollbackFor=ng.Exception.class,propagation=Pro pagation.REQUIRED)@Overridepublicboolean updateEmp(Emp emp) {try {this.empDao.update(emp);returntrue;} catch (Exception e) {e.printStackTrace();}returnfalse;}List.jsp页面<script type="text/javascript">function deleteMe(id){if(window.confirm("您确定要删除吗?")){window.location.href="deleteEmp?emp.empno="+id;}}function updateMe(id){window.location.href="prepUpdateEmp?emp.empno="+id;}</script><body><a href="preAddEmp">增加员工</a><table border="1"cellpadding="5"cellspacing="0"width="100%"> <tr><td>编号</td><td>姓名</td><td>职位</td><td>工资</td><td>入职日期</td><td>所属部门</td><td>操作</td></tr><s:if test="emps!=null"><s:iterator var="emp"value="emps"><tr><td><s:property value="#emp.empno"/></td><td><s:property value="#emp.ename"/></td><td><s:property value="#emp.job"/></td><td><s:property value="#emp.sal"/></td><td><s:date name="#emp.hiredate"format="yyyy/MM/dd"/></td><td><s:property value="#emp.dept.dname"/></td><td><a href="javascript:deleteMe(<s:property value="#emp.empno"/>)">删除</a><a href="javascript:updateMe(<s:property value="#emp.empno"/>)">修改</a></td></tr></s:iterator></s:if></table>add.jsp<td><label>奖金:</label></td><td><input type="text"name="m"></td></tr><tr><td><s:select name="emp.dept.deptno"label="所属部门"list="depts"listKey="deptno"listValue="dname"headerKey="0"headerValue= "请选择部门"></s:select></td></tr><tr><td colspa97插件<tr><td><label>入职日期:</label></td><td><input type="text"name="emp.hiredate"onClick="WdatePicker()"class ="Wdate"value="<s:date name='emp.hiredate'format='yyyy-MM-dd'/>"></td> </tr>。
浅谈基于过滤器与拦截器的用户访问控制

技 术 探 讨 ・ eh o o y a d S u y T cn lg n t d
浅谈基于过滤器与拦截器的用户访问控制
郑 志 娴
( 建 船 政 交通 职 业 学 院 福 建福 州 3 0 0 ) 福 50 7
【摘要 】 本文主要针对基于 J E 2 E过滤器技术与拦截器结合实现 用户的访 问控制进行讨论。文 中介绍了 S rl 过滤器技术 和 eve t
方法。
()i 1i t 法 , 在 过滤 器 执 行 svc 前 被 调 用 , n 0方 它 ei r e 以设 置
过 滤器 的 配置 对象 。
大部 分时候 ,拦 截器 方法 都是通 过 代理 的方 式来 调 用的 。 S us t t 2的 拦 截 器 实 现 相 对 简 单 , 当 请 求 到 达 S us r t t 2的 r SrlDsa hr ,t t2会查 找配 置 文件 , 根据 其 配 置实 e e i t e 时 Sr s vt pc u 并 例化 相对 的拦 截 器 对象 , 后 串 成一 个 列表 (s , 然 1t 最后 一 个一 i) 个地 调用 列表 中 的拦 截器 。
【 b r t Tippr a ld cse e srces otlae E t cnl y n tcp r h a r tdcsh e l ir A s c 】 h e m iy iussh eacs nobsd n 2 Ef r ho g dn r t. ipp r ue e reFt t a s a n s t u c r oJ i t l e o a ie e o T s e i o e n t S vtl e
javaweb中监听器、过滤器、拦截器以及AOP的先后顺序和理解

javaweb中监听器、过滤器、拦截器以及AOP的先后顺序和理解java web三⼤器:过滤器、拦截器、监听器(spring框架)spring、springMVC与springBoot的关系详见:⼀、启动顺序监听器---》过滤器---》拦截器案例理解:接到上级命令,要求对电话进去监听,过滤出恐怖分⼦,然后,拦截他们的恐怖袭击⾏动。
配置位置:监听器、过滤器⼀般配置在web.xml中,拦截器⼀般配置在springmvc.xml配置⽂件中⼆、概念监听器:Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener接⼝的服务器端程序,它也是随web应⽤的启动⽽启动,只初始化⼀次,随web应⽤的停⽌⽽销毁。
主要作⽤是:做⼀些初始化的内容添加⼯作、设置⼀些基本的内容、⽐如⼀些参数或者是⼀些固定的对象等等Filter过滤器:过滤器拦截web访问url地址。
严格意义上讲,filter只是适⽤于web中,依赖于Servlet容器,利⽤Java的回调机制进⾏实现。
Filter过滤器:和框架⽆关,可以控制最初的http请求,但是更细⼀点的类和⽅法控制不了。
过滤器可以拦截到⽅法的请求和响应(ServletRequest request, ServletResponse response),并对请求响应做出像响应的过滤操作,⽐如设置字符编码,鉴权操作等⽐如:(不是login.do的地址请求,如果⽤户没有登陆都过滤掉),或者在传⼊servlet或者struts的action前统⼀设置字符集,或者去除掉⼀些⾮法字符。
主要为了减轻服务器负载,减少压⼒。
Interceptor拦截器:拦截器拦截以 .action结尾的url,拦截Action的访问。
Interfactor是基于Java的反射机制(APO思想)进⾏实现,不依赖Servlet容器。
拦截器可以在⽅法执⾏之前(preHandle)和⽅法执⾏之后(afterCompletion)进⾏操作,回调操作(postHandle),可以获取执⾏的⽅法的名称,请求(HttpServletRequest)Interceptor:可以控制请求的控制器和⽅法,但控制不了请求⽅法⾥的参数(只能获取参数的名称,不能获取到参数的值)(⽤于处理页⾯提交的请求响应并进⾏处理,例如做国际化,做主题更换,过滤等)。
SSH题库

1. SSH中,依次处理的哪一层的实现?DA.Struts–业务逻辑层;Hibernate-表现层;Spring-持久层B.Struts-表现层;Hibernate-业务逻辑层;Spring-持久层C.Struts-持久层;Hibernate-表现层;Spring-业务逻辑层D.Struts-表现层;Hibernate-持久层;Spring-业务逻辑层2. 在Struts实现的MVC框架中,(A)类是包含了excute方法的控制器类,负责调用模型的方法,控制应用程序的流程。
A. ActionB. EJBC. ActionServletD. JSP3. 在基于Struts框架的Web应用中,下面关于Action类的说法正确的是(C)。
A. Action类属于模型组件B. Action类主要用来完成实际的业务逻辑C. Action类负责调用模型的方法,更新模型的状态,并帮助控制应用程序的流程D. 在Web应用启动时会自动加载所有的Action实例4. 下面关于数据持久化概念的描述,错误的是(D)。
A.保存在内存中数据的状态是瞬时状态B.持久状态的数据在关机后数据依然存在C.数据可以由持久状态转换为瞬时状态D.将数据转换为持久状态的机制称为数据持久化5. 下面关于Hibernate的说法,错误的是(C)。
A.Hibernate是一个“对象-关系映射”的实现B.Hibernate是一种数据持久化技术C.Hibernate是JDBC的替代技术D.使用Hibernate可以简化持久化层的编码6. 在使用了Hibernate的系统中,要想在删除某个客户数据的同时删除该客户对应的所有订单数据,下面方法可行的是(B)。
A.配置客户和订单关联的cascade属性为save-updateB.配置客户和订单关联的cascade属性为allC.设置多对一关联的inverse属性为trueD.设置多对一关联的inverse属性为false7. 执行下面的hql查询,关于返回值的说法,正确的是(B)。
Java三大器之拦截器(Interceptor)的实现原理及代码示例

Java三⼤器之拦截器(Interceptor)的实现原理及代码⽰例1,拦截器的概念java⾥的拦截器是动态拦截Action调⽤的对象,它提供了⼀种机制可以使开发者在⼀个Action执⾏的前后执⾏⼀段代码,也可以在⼀个Action执⾏前阻⽌其执⾏,同时也提供了⼀种可以提取Action中可重⽤部分代码的⽅式。
在AOP中,拦截器⽤于在某个⽅法或者字段被访问之前,进⾏拦截然后再之前或者之后加⼊某些操作。
⽬前,我们需要掌握的主要是Spring的拦截器,Struts2的拦截器不⽤深究,知道即可。
2,拦截器的原理⼤部分时候,拦截器⽅法都是通过代理的⽅式来调⽤的。
Struts2的拦截器实现相对简单。
当请求到达Struts2的ServletDispatcher时,Struts2会查找配置⽂件,并根据配置实例化相对的拦截器对象,然后串成⼀个列表(List),最后⼀个⼀个的调⽤列表中的拦截器。
Struts2的拦截器是可插拔的,拦截器是AOP的⼀个实现。
Struts2拦截器栈就是将拦截器按⼀定的顺序连接成⼀条链。
在访问被拦截的⽅法或者字段时,Struts2拦截器链中的拦截器就会按照之前定义的顺序进⾏调⽤。
3,⾃定义拦截器的步骤第⼀步:⾃定义⼀个实现了Interceptor接⼝的类,或者继承抽象类AbstractInterceptor。
第⼆步:在配置⽂件中注册定义的拦截器。
第三步:在需要使⽤Action中引⽤上述定义的拦截器,为了⽅便也可以将拦截器定义为默认的拦截器,这样在不加特殊说明的情况下,所有的Action都被这个拦截器拦截。
4,过滤器与拦截器的区别过滤器可以简单的理解为“取你所想取”,过滤器关注的是web请求;拦截器可以简单的理解为“拒你所想拒”,拦截器关注的是⽅法调⽤,⽐如拦截敏感词汇。
4.1,拦截器是基于java反射机制来实现的,⽽过滤器是基于函数回调来实现的。
(有⼈说,拦截器是基于动态代理来实现的)4.2,拦截器不依赖servlet容器,过滤器依赖于servlet容器。
详解SSH客户端配置文件

详解SSH客户端配置文件:ssh_config一、了解R S A二、什么是S S H三、S S H协议的内容四、S S H协议的安全验证五、S S H的应用六、开始配置S S H服务器1、首先确认系统已经安装了以下两个包[r o o t@l o c a l h o s t~]#r p m-q a|g r e p"z l i b-[0-9]"(z l i b包至少为 1.1.4版本)[r o o t@l o c a l h o s t~]#r p m-q a|g r e p"o p e n s s l-[0-9]"(o p e n s s l包至少为0.9.6版本)2、下载并安装o p e n s s h安装包1)下载O p e n S S H(1)官方网:w w w.o p e n s s h.o r g(2)下载当前最新版:O p e n S S H 5.3/5.3p1[r o o t@l o c a l h o s t~]#w g e tf t p://m i r r o r.m c s.a n l.g o v/p u b/o p e n s s h/p o r t a b l e/o p e n s s h-5.3p1.t a r.g z2)安装O p e n S S H(具体看O p e n S S H.t a r.g z包中的I N S T A L L文件)[r o o t@l o c a l h o s t~]#t a r-z x v f o p e n s s h-5.3p1.t a r.g z;c d o p e n s s h-5.3p1[r o o t@l o c a l h o s t o p e n s s h-5.3p1]#t o u c h r u n.s h;c h m o d u+x r u n.s h然后在r u n.s h文件中输入以下几行内容:[r o o t@l o c a l h o s t o p e n s s h-5.3p1]# ./r u n.s h&&m a k e&&m a k e i n s t a l l[r o o t@l o c a l h o s t o p e n s s h-5.3p1]#c p c o n t r i b/r e d h a t/s s h d.p a m/e t c/p a m.d/s s h d注意:一定不要忘记拷贝s s h d.p a m到/e t c/p a m.d目录下,并改名为s s h d,要不然用户就不能通过S S H服务器的”基于口令的安全验证”方式,从而不能登录S S H服务器[r o o t@l o c a l h o s t~]#e c h o"/u s r/l o c a l/o p e n s s h/s b i n/s s h d&">>/e t c/r c.l o c a l注意:安装完以后,把s s h d服务启动加入到r c.l o c a l脚本中,从而实现系统时,自动启动该服务[r o o t@l o c a l h o s t o p e n s s h-5.3p1]#c p/u s r/l o c a l/o p e n s s h/s h a r e/m a n/m a n1/*/u s r/l o c a l/s h a r e/m a n/m a n1/[r o o t@l o c a l h o s t o p e n s s h-5.3p1]#c p/u s r/l o c a l/o p e n s s h/s h a r e/m a n/m a n5/*/u s r/l o c a l/s h a r e/m a n/m a n5/[r o o t@l o c a l h o s t o p e n s s h-5.3p1]#c p/u s r/l o c a l/o p e n s s h/s h a r e/m a n/m a n8/*/u s r/l o c a l/s h a r e/m a n/m a n8/注意:把帮助文件拷贝到/u s r/l o c a l/s h a r e/m a n/下面,已便用m a n命令查看帮助[r o o t@M y l i n u x~]#u s e r a d d r u a n x i;p a s s w d r u a n x i[r o o t@M y l i n u x~]#u s e r a d d c r s k y;p a s s w d c r s k y[r o o t@M y l i n u x~]#g r o u p a d d S S H a d m i n[r o o t@M y l i n u x~]#v i/e t c/g r o u p把用户r u a n x i加入到组S S H a d m i n中,修改/e t c/g r o u p中的内容:S S H a d m i n:x:503:r u a n x i注意:这里把用户加入S S H a d m i n组中的目的是:让r u a n x i能够登录S S H服务器,而用户c r s k y没有加入到S S H a d m i n组中,也就无法登录S S H服务器了,因为一般系统管理员的人数不会很多,所以我们只让系统管理员有权登录S S H服务器,其他人员禁止登录,这样能让服务器更安全(具体还得配置s s h d_c o n f i g文件)3)修改配置文件(1)安装完o p e n s s h后,会生成以下几个配置文件(注意:这些生成的配置文件具体要放在哪个位置?这是由--s y s c o n f i g d i r参数指定的)m o d u l i#s s h服务器的D i f f i e-H e l l m a n密钥文件s s h_c o n f i g#s s h客户端配置文件s s h d_c o n f i g#s s h服务器配置文件s s h_h o s t_d s a_k e y#s s h服务器d s a算法私钥s s h_h o s t_d s a_k e y.p u b#s s h服务器d s a算法公钥s s h_h o s t_r s a_k e y#s s h服务器r s a算法私钥s s h_h o s t_r s a_k e y.p u b#s s h服务器r s a算法公钥(2)编辑s s h服务器配置文件(s s h d_c o n f i g)[r o o t@l o c a l h o s t~]#v i/u s r/l o c a l/o p e n s s h/s s h_c o n f i g(3)编辑客户端登录环境的配置文件s s h_c o n f i g,通过修改它来改变客户端程序的运行方式[r o o t@M y l i n u x~]#v i/u s r/l o c a l/o p e n s s h/s s h_c o n f i g(4)配置S S H服务器的论证方式第一种:基于口令的论证方式:只需要对上面的配置文件:s s h d_c o n f i g与s s h_c o n f i g做些修改,修改如下:在上面的服务器配置文件s s h d_c o n f i g中,只需去掉下列行的“#”号#P a s s w o r d A u t h e n t i c a t i o n y e s==>P a s s w o r d A u t h e n t i c a t i o n y e s#C h a l l e n g e R e s p o n s e A u t h e n t i c a t i o n y e s==>C h a l l e n g e R e s p o n s e A u t h e n t i c a t i o n y e s在上面的客户端配置文件s s h_c o n f i g中,只需去掉下列行的“#”号#P a s s w o r d A u t h e n t i c a t i o n y e s==>P a s s w o r d A u t h e n t i c a t i o n y e s如果已启动s s h d服务,那么重新启动一下s s h d(k i l l a l l-H U P s s h d),如果还没有启动s s h d服务,现在就用指令:"/u s r/l o c a l/o p e n s s h/s b i n/s s h d &"启动s s h d服务,然后让用户:r o o t与c r s k y分别重新登录,此时会产生如下结果:分析原因:在服务器配置文件s s h d_c o n f i g中设置不允许r o o t用户登录S S H服务器,另外用户c r s k y不属于S S H a d m i n组的成员,所以也无法登录S S H服务器第二种:基于密钥的论证方式:只需要对上面的配置文件:s s h d_c o n f i g与s s h_c o n f i g做些修改,修改如下:在上面的服务器配置文件s s h d_c o n f i g中,修改如下几行#H o s t K e y/u s r/l o c a l/o p e n s s h/s s h_h o s t_r s a_k e y==>H o s t K e y/u s r/l o c a l/o p e n s s h/s s h_h o s t_r s a_k e y#H o s t K e y/u s r/l o c a l/o p e n s s h/s s h_h o s t_d s a_k e y==>H o s t K e y /u s r/l o c a l/o p e n s s h/s s h_h o s t_d s a_k e y#A u t h o r i z e d K e y s F i l e.s s h/a u t h o r i z e d_k e y s==>A u t h o r i z e d K e y s F i l e.s s h/ a u t h o r i z e d_k e y s#P a s s w o r d A u t h e n t i c a t i o n y e s==>P a s s w o r d A u t h e n t i c a t i o n n o#C h a l l e n g e R e s p o n s e A u t h e n t i c a t i o n y e s==>C h a l l e n g e R e s p o n s e A u t h e n t i c a t i o n n o在上面的客户端配置文件s s h_c o n f i g中,修改如下几行#I d e n t i t y F i l e~/.s s h/i d_r s a==>I d e n t i t y F i l e~/.s s h/i d_r s a#I d e n t i t y F i l e~/.s s h/i d_d s a==>I d e n t i t y F i l e~/.s s h/i d_d s a#P a s s w o r d A u t h e n t i c a t i o n y e s==>P a s s w o r d A u t h e n t i c a t i o n n o七、O p e n S S H用户工具1、s s h(登录远程S S H服务器)1)S S H服务器基于密钥的认证方式[r u a n x i@M y l i n u x~]$s s h-l r u a n x i-i~/.s s h/i d_r s a-p2222-2192.168.1.1002)S S H服务器基于密码的认证方式[r u a n x i@M y l i n u x~]$s s h-l r u a n x i-p2222192.168.1.100;3)使用S S H登录来执行远程的一些命令[r u a n x i@M y l i n u x~]$s s h-l r u a n x i-p2222-2-q-i~/.s s h/i d_r s a192.168.1.100'l s-l/t m p;l s-l /e t c/g r u b.c o n f'(即:使用用户账号r u a n x i安静登录,并使用密钥方式来验证,登录后执行命令:l s -l/t m p,把结果返回到本地终端并退回到本地)参数解析-p:不使用默认端口,使用2222端口-2:选用S S H v2-l:登录用户名-i:指定登录的用户的私钥存放位置-q:安静模式登录2、s s h-k e y g e n工具例如:为ruanxi用户修改pass-phrase。
SSH配置

SSH 配置SSH 配置作者:admin 文章来源:本站原创 点击数: 15 更新时间:2009-12-28 18:22:24配置客户端的软件OpenSSH 有三种配置方式:命令行参数、用户配置文件和系统级的配置文件("/etc/ssh/ssh_config")。
命令行参数优先于配置文件,用户配置文件优先于系统配置文件。
所有的命令行的参数都能在配置文件中设置。
因为在安装的时候没有默认的用户配置文件,所以要把 "/etc/ssh/ssh_config"拷贝并重新命名为"~/.ssh/config"。
标准的配置文件大概是这样的:[lots of explanations and possible options listed]# Be paranoid by defaultHost *ForwardAgent noForwardX11 noFallBackToRsh no还有很多选项的设置可以用"man ssh"查看"CONFIGURATION FILES"这一章。
配置文件是按顺序读取的。
先设置的选项先生效。
假定你在 上有一个名为"bilbo"的帐号。
而且你要把"ssh-agent"和"ssh-add"结合起来使用并且使用数 据压缩来加快传输速度。
因为主机名太长了,你懒得输入这么长的名字,用"fbc"作为""的简称。
你的配置文件可以是这样 的:Host *fbc HostName User bilboForwardAgent yesCompression yes# Be paranoid by defaultHost *ForwardAgent noForwardX11 noFallBackToRsh no你输入"ssh fbc"之后,SSH 会自动地从配置文件中找到主机的全名,用你的用户名登录并且用"ssh-agent"管理的密匙进行安全验证。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SSH中自定义监听器、拦截器、过滤器1、自定义监听器a)自定义监听器有哪些监听器的定义是在web.xml中完成,其实做过ssh项目的人并不陌生监听器,主要是因为spring提供了监听器就是<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>如果我们想自己定义一个监听器来完成我们自己的特定功能怎么办呢,struts为我们提供了自定义servlet监听器,他们主要有(1)ServletContextListenerServlet的上下文监听,它主要实现监听ServletContext的创建和删除。
该接口提供了两种方法1.contextInitialized(ServletContextEvent event); 通知正在收听的对象,应用程序已经被加载和初始化。
2.contextDestroyed(ServletCotextEvent event); 通知正在收听的对象,应用程序已经被载出,即关闭。
(2)ServletAttributeListener主要实现监听ServletContext属性的增加,删除和修改。
该接口提供了一下3个方法1.attributeAdded(ServletContextAttributeEvent event); 当有对象加入Application的范围时,通知正在收听的对象2.attributeReplaced(ServletContextAttributeEvent event); 当在application的范围有对象取代另一个对象的时,通知正在收听的对象3.attributeRemoved(ServletContextAttributeEvent event); 当有对象从application的范围移除时,通知正在收听的对象(3)HttpSessionListenerHTTP会话监听,该接口实现监听HTTP会话创建、销毁。
该接口提供了一下两种方法1.sessionCreated(HttpSessionEvent event); 通知正在收听的对象,session已经被加载及初始化2. sessionDestoryed(HttpSessionEvent event)l 通知正在收听的对象,session已经被载出(HttpSessionEvent类的主要方法是getSession(),可以使用该方法回传一个session对象)(4)HttpSessionActivationListener该接口实现监听HTTP会话active和passivate。
该接口提供了一下3个方法1.attributeAdded(HttpSessionBindingEvent event); 当有对象加入session的范围时,通知正在收听的对象2.attributeReplaced(HttpSessionBindingEvent event); 当在session的范围有对象取代另一个对象时,通知正在收听的对象。
3.attributeRemoved(HttpSessionBindingEvent event); 当有对象从session的范围有对象取代另一个对象时,通知正在收听的对象其中HttpSessionBindingEvent类主要有三个方法:getName()、getSession()和getValue()(5)HttpBindingListener接口实现监听HTTP会话中对象的绑定信息。
它是唯一不需要在web.xml中设定Listener的。
该接口提供了以下2个方法1.valueBound(HttpSessionBindingEvent event); 当有对象加入session的范围时会被自动调用2.valueUnBound(HttpSessionBindingEvent event); 当有对象从session的范围内移除时会被自动调用(6)HttpSessionAttributeListener该接口实现监听HTTP会话中属性的设置请求。
该接口提供了以下两个方法。
1.sessionDidActivate(HttpSessionEvent event); 通知正在收听的对象,它的session已经变为有效状态。
2.sessionWillPassivate(HttpSessionEvent event); 通知正在收听的对象,它的session已经变为无效状态(7)ServletRequestListener该接口提供了以下两个方法。
1.requestInitalized(ServletRequestEvent event) 通知正在收听的对象,ServletRequest已经被加载及初始化2.requestDestroyed(ServletRequestEvent event) 通知正在收听的对象,ServletRequest已经被载出,即关闭(8)ServletRequestAttributeListener该接口提供了一下三种方法1.attributeAdded(ServletRequestAttributeEvent event);当有对象加入request的范围时,通知正在收听的对象2.attributeReplaced(ServletRequestAttributeEvent event); 当在request的范围内有对象取代两一个对象时,通知正在收听的对象3.attributeRemoved(ServletRequestAttributeEvent event); 当有对象从request的范围移除时,通知正在收听的对象b)怎么去自定义监听器1)在web.xml中加入这一样一段话<!-- 监听器的使用,监听session对象 --><listener><listener-class>com.wlm.iagtc.listener.SessionListener</listener- class></listener>把自己定义的监听器类的全路径写进去SessionListener.java类package com.wlm.iagtc.listener;import java.util.Enumeration;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;public class SessionListener implements HttpSessionListener{public void sessionCreated(HttpSessionEvent se) {System.out.println("session监听器启动!!!");HttpSession session = se.getSession();Enumeration login = session.getAttributeNames();if(login.hasMoreElements()){System.out.println("监听到了session对象的创建"+login.nextElement());}System.out.println(session.getId()+"----id");}public void sessionDestroyed(HttpSessionEvent se) {System.out.println("session监听器销毁!!!");HttpSession session = se.getSession();Enumeration login = session.getAttributeNames();if(login.hasMoreElements()){System.out.println("监听到session对象的消失!"+login.nextElement());}}}就这样就可以监听session对象的创建和销毁了注:session的创建:对象在你打开浏览器访问网站的一瞬间就框架就已经创建了Session的销毁:session的销毁有三种方式1、关闭浏览器2、利用代码invalidate()方法销毁session对象3、设置session过期时间,销毁session<!-- 配置session时长,也就是说如果用户长时间没有访问服务器,就杀死session --><session-config><session-timeout>5</session-timeout></session-config>你可以根据不同的接口,来监听不同的事件。
2、自定义过滤器a)过滤器的创建过滤器struts2自己就定义的有,是默认的过滤器在web.xml中<!-- 定义默认过滤器 --><filter><!-- 过滤器的名字 --><filter-name>struts2</filter-name><!-- 过滤器的类文件 --><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><!-- 启动过滤器 --><filter-mapping><!-- 要引用的过滤器 --><filter-name>struts2</filter-name><!-- 过滤器的url串,这里是过滤全部 --><url-pattern>/*</url-pattern></filter-mapping>过滤器是Servlet2.3以上新增加的一个功能,其技术也是非常强大的。
通过Filter技术可以对WEB服务器的文件进行拦截,从而实现一些特殊的功能。