WEB开发

JMX远程连接失败

Oct 9, 2016 | | Say something

今天使用JMX远程连接kafka时,执行netstat -ntupl发现jmx 端口启动了,而且selinux关闭了,防火墙了关闭了,就是连接不上,一番google,发现是没有配置-Djava.rmi.server.hostname=ip address的缘故,why-do-i-need-to-define-java-rmi-server-hostname 解释了为什么需要配置这个属性, 摘录如下: When you execute an RMI lookup server generates a stub and _hardcodes_ it’s own address in it. Stub is then transfered to the client and address generated by the server used for method remoting. The address hardcoded in the stub has nothing to do with an address you used […more]

CAS Client使用https协议访问cas服务器

Sep 22, 2016 | | Say something

相关的视频教程观看地址:单点登录系列视频教程 在cas server端需要先产生密钥对:cn后面的名字对应cas服务器的域名 keytool -genkeypair -validity 730 -keyalg RSA -alias cas -keystore thekeystore.jks -dname “cn=cas.javacoder.cn” -keypass changeit -storepass changeit 导出服务器的证书 keytool -export -rfc -keystore thekeystore.jks -alias cas -file MyService.cer -storepass changeit 将服务器的证书导入客户端的密钥库中 keytool -import -noprompt -trustcacerts -file MyService.cer -alias cas -keystore clientKeystore.jks -storepass changeit 客户端添加jvm参数,比如tomcat,在catalina.bat 中添加 set CLIENT_CERT=C:\Endeca\PlatformServices\workspace\etc\eneCert.jks set CATALINA_OPTS=-Djavax.net.ssl.keyStore=%CLIENT_CERT% -Djavax.net.ssl.keyStorePassword=endeca -Djavax.net.ssl.trustStore=%CLIENT_CERT% -Djavax.net.ssl.trustStorePassword=endeca -Djavax.net.ssl.keyStore设置我们的私有秘钥对 如果我们只是导入服务器的证书,只要设置-Djavax.net.ssl.trustStore和-Djavax.net.ssl.trustStorePassword就好了,其实我发现不设置-Djavax.net.ssl.trustStorePassword好像也可以,

单点登录系列视频教程

Sep 21, 2016 | | Say something

又是一年毕业季,为了丰富大家的经验,特此准备了单点登录系列视频教程。本视频教程的主要内容有: 1 常规登录示例及分析 分析常规登录的流程,主要介绍AccessFilter的编写 2 同域名基于memcached登录 介绍Cookie的基本知识,利用同域名下cookie共享实现单点登录功能,即讲解了如何操作cookie,以及如何使用修饰模式封装HttpServletRequest对象和重写HttpSession 3 CAS服务器安装 网上许多关于CAS介绍的文档都是基于老的CAS版本,新的版本推荐我们使用maven 的overlay功能自己构建CAS服务器。本节的主要内容是关于新版本下CAS服务器的构建及运行。介绍spring别名的使用,介绍cas server项目的基本结构 4 CAS Client示例 介绍在客户端集成CAS登录功能 5 使用数据库认证 CAS默认的账号是一个配置在CAS.properties文件中的”casuser:Mellon”账号,现实中用户信息来源有很多种,比如数据库,ldap等,本课程介绍基于数据库的认证。 6 属性释放 CAS3.0协议添加了属性释放功能,就是在认证的过程中将用户相关的属性,比如用户的邮箱,手机号,爱好等信息返回给客户端。 7 Client使用https访问CAS 如果客户端需要使用https协议访问CAS服务器,那么我们需要将服务器的安全证书导入客户端的证书库中。 8 使用memcached存储ticket CAS默认使用一个CurrentHashMap存放ticket,这种方式在CAS服务器重启后会丢失所有的ticket,也不便于集成,所以我们使用memcached实现集中式ticket存储。 9 CAS代理认证 某些场景,比如使用apache或者nginx来集群web服务器,或者A服务需要访问B服务中受权限保护的资源,这是就需要代理服务器或者A服务先获取代理ticket,然后去访问相关的资源。 10 OAuth协议集成简介 很多网站都支持第三方登录功能,其实这个功能就是OAuth协议的应用。本节简介该协议。 心动不如行动,点击我开始学习吧 相关资源: 本课程的相关源码下载:cas-server.zip 本课程的相关课件ppt[从CSDN学院下载] CAS github地址: https://github.com/apereo/cas CAS 文档: https://apereo.github.io/cas/4.2.x/index.html

mvc:annotation-driven 的作用

May 17, 2016 | | Say something

相关的代码在org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser.parse 方法中实现的,分别注册RequestMappingHandlerMapping,RequestMappingHandlerAdapter,ExceptionHandlerExceptionResolver,ResponseStatusExceptionResolver,DefaultHandlerExceptionResolver 到spring 容器,对于RequestMappingHandlerAdapter和ExceptionHandlerExceptionResolver一个重要的属性是messageConverters 用来进行消息转换。如果jackson和jaxb 库在classpath下,那么就会注册Jaxb2RootElementHttpMessageConverter和MappingJackson2HttpMessageConverter,当一个RequestMapping方法添加了@ResponseBody注解后,就会相应地转为json或者xml字符串

JSP tag开发

Feb 2, 2016 | | Say something

demo下载:test-tag.zip 开始学jsp的时候觉得jstl很酷炫,很神秘,还经常因为jar包找不到而沮丧,工作之后发现很多项目都有自定义tag库,tag库用的好,确实能减少service层的复杂性,通过查阅资料,对其有了一定的了解,将其写出来,共哪些对这个主题感兴趣的同学借鉴, java自带的tag库的层级如下 1、简单tag功能开发 如果只是简单的处理,可以继承自SimpleTagSupport,重载doTag()方法,先来个HelloTag.java

如果你的tag需要支持属性,比如HelloTag中的name属性,那么需要为其添加一个setter方法。doTag()的实现也很简单,获取JspWriter,向页面输出”hello ” + name内容。 接下来需要创建一个.tld的描述文件,内容如下:

大家也不必强记这个文件格式,在<%@ taglib prefix=”fmt” uri=”http://java.sun.com/jsp/jstl/fmt”%> 处,”ctrl+鼠标左键”可以查看该tag库的tld,然后依猫画虎啦。 这个tld文件其实就是一个xml文件,引入web-jsptaglibrary_2_0.xsd是为了内容验证,当然uri也可以不加的。rtexprvalue表示值的内容是否为表达式,比如el表达式。 接下来创建一个test.jsp,添加内容如下: <%@ taglib prefix=”ex” uri=”/WEB-INF/classes/custom.tld”%> <ex:hello name=”javacoder.cn”/> 第一行代码的作用是导入我们的标签库,第二行是调用我们的tag。 部署到服务器,访问这个页面,那么会向页面输出”javacoder.cn” 2、实现稍微复杂的tag功能 这就是TagSupport和BodyTagSupport抽象类大显身手的时候了。 TagSupport中几个重要的,需要我们根据实际的业务重载的方法如下: public int doStartTag() throws JspException 标识tag处理开始,处理流程和在doTag()方法中一样,获取Writer,向页面输出内容。如果需要处理tag的boby部分,就是这个tag有包含的内容,那么返回EVAL_BODY_INCLUDE否则返回SKIP_BODY。 public int doEndTag() throws JspException 标识一个tag处理结束。合法的返回值是EVAL_PAGE和SKIP_PAGE。一般当包含子tag的时候,才需要实现doEndTag()方法,比如当然tag输出table元素,那么在子元素处理完成后,需要在这个方法中输出”</table>”这样的结束元素。 public int doAfterBody() throws JspException 当doStartTag方法返回EVAL_BODY_BUFFERED时,tag的处理流程如下。 当doStartTag()执行完成后,会创建一个bodyContent对象,然后,处理该tag包含的子元素,当子元素处理完成后,会调用doAfterBody方法,如果doAfterBody返回 EVAL_BODY_AGAIN,那么会再次处理子元素,如果返回SKIP_BODY那么调用doEndTag(),结束本tag的处理。这个可以参考core标签库的c:forEach的实现。 BodyTagSupport类继承自TagSupport,一个重要的扩展是我们可以高效地处理tag的body内容。 这个基类的一个重要扩展是添加了bodyContent。demo中的cn.javacoder.test.tag.LoopTag虽然有点无聊,但是也是对这个功能的一个演示。 本demo还实现了另外的两个标签,TableTag, TrTag,用来演示el表达式的使用。欢迎下载 本文由javacoder.cn博主提供,转载请注明出处!

Spring Security简单实践

Feb 1, 2016 | | Say something

demo下载:test_security.zip 网上讲这个主题的帖子很多,而且《spring in action》和《spring security reference》的Security Namespace Configuration节有详细的介绍。本文就提供一个基于maven的demo工程供大家快速起步好了。 本demo有两个请求路径 http://localhost:8080/test_security/admin/test2.do http://localhost:8080/test_security/test1.do 添加了如下的用户信息 username   授权 ——————————————————– root            ROLE_ADMIN,ROLE_COMMON rex              ROLE_ADMIN hml            ROLE_COMMON 有如下的权限映射信息:

所以root能访问这两个url,而rex能访问第一个,hml能访问第二个,具体参考applicationContext.xml文件的配置 注意点如下: 1、如果<security:http>元素的use-expressions=’true’,那么不能在<security:intercept-url>元素的access属性值中使用IS_AUTHENTICATED_ANONYMOUSLY等系统常量,只能使用access=”isAnonymous()”这样的表达式。当<security:http use-expressions=”true”> 激活SpEL表达式的时候,不支持使用角色名。 不然会抛出如下异常 java.lang.IllegalArgumentException: Failed to evaluate expression ‘IS_AUTHENTICATED_ANONYMOUSLY’ 2、当自定义登陆view的时候,要将login.jsp排查在spring security的验证范围,不然就没法登陆了。 3、如果启用了csrf机制,那么login.jsp页面要如下配置 […more]

eclipse不能部署maven依赖到tomcat

Jan 27, 2016 | | Say something

解决办法: project->properties->deployment Assembly->Add ->java Build Path Entries->Maven Dependencies

JSONP的简单理解

Dec 8, 2015 | | Say something

ajax有跨域问题而静态资源(js文件,css文件)没有,是不是可以将ajax调用转换为静态资源的GET请求呢,这就是JSONP的逻辑 假设www.xxxx.com/test.do?id=2路径原来返回的是一个json对象,如下 {“username”:”javacoder.cn”} 现在将请求改为www.xxxx.com/test.do?id=2&callback=mycallback,返回值改为 mycallback({“username”:”javacoder.cn”}) 这样返回值就是一个合法的js脚本了,浏览器就可以通过

标签将其加载到页面, 这样mycallback函数就得以执行啦, 比如我们的mycallback函数定义如下:

那么jsonp有什么不好处呢, 1)只能支持GET请求, 2)如果每次的参数都不一样,页面应该会有很多个 <script src=”www.xxxx.com/test.do?id=XX&callback=mycallback”></script> 这样的标签

spring mvc一个处理方法返回不同类型的数据

Aug 12, 2015 | | Say something

有时我们希望处理成功后返回生成的html代码片段,失败的时候返回如下的json对象 {“success”:false, “msg”:”输入有误”} 可以按如下的方式配置view和view resolver

这样在我们的方法中返回jsonView时表示交由MappingJackson2JsonView处理生成json字符串。

本文由javacoder.cn提供

使用memcached实现应用无session化

Aug 12, 2015 | | Say something

demo 下载:test-stateless.zip 实现原理: 在filter中利用wrapper模式,使用自定义的HttpServletRequest对象和HttpServletResponse对象。这样就可以将自定义的使用memcached存放数据的Session对象放进Request链中,主要的配置如下: 1)web.xml 添加filter声明 需要是第一个filter

  2)在pom.xml中添加相应的依赖

  3)添加stateless.properties 文件,指定memcached的路径 memcache.server1=192.168.14.132:11211 测试: http://localhost:8080/test-stateless/test.do?username=javacoder.cn 工程地址 官网 http://statelessfilter.sourceforge.net