标签存档: Java

CAS单点登录(SSO)完整教程(2012-02-01更新)

一、教程前言

  1. 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤
  2. 单点登录SSO):请看百科解释猛击这里打开
  3. 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Authentication Server),
    官网:http://www.jasig.org/cas
  4. 本教程环境:
    • Tomcat6.0.29
    • JDK6
    • CAS Server版本:cas-server-3.4.3.1、cas-server-3.4.10
    • CAS Client版本:cas-client-3.1.12、cas-client-3.2.1
    • 教程撰写日期:2010-11-05(第一版)、2011-11-05(一年后更新)、2012-02-01(异常处理)
    • 教程作者:咖啡兔

二、创建证书

啰嗦几句:证书是单点登录认证系统中很重要的一把钥匙,客户端于服务器的交互安全靠的就是证书;本教程由于是演示所以就自己用JDK自带的keytool工具生成证书;如果以后真正在产品环境中使用肯定要去证书提供商去购买,证书认证一般都是由VeriSign认证,
中文官方网站:http://www.verisign.com/cn/
继续阅读 »

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: CAS单点登录(SSO)完整教程(2012-02-01更新)

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于Java和jQuery开发企业RIA应用

More Posts - Website

Struts2 Annotation实现文件下载功能

一、达到目标:

给定任意Web根路径下面的文件相对路径下载文件,在任意浏览器下下载文件不出现乱码问题;

二、开发要点:

  • Annotation:
    经历了Struts1的大量Action配置之后到了Struts2坚决放弃了xml配置,虽然struts2的xml配置比较简单了,但是我真的很懒……
    所以这里实现全部是有注解实现,简单、方便、容易日后的重构
  • 文件名乱码
    提高这个问题都想吐,为什么不全部使用UTF-8编码呢……
    既然不能改变那就只能解决,所以这里要考虑各个浏览器对文件名的编码解析

三、具体实现

继续阅读 »

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: Struts2 Annotation实现文件下载功能

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于Java和jQuery开发企业RIA应用

More Posts - Website

Eclipse+Maven+WTP+Tomcat不能Run On Server其中一个原因

使用Maven有段时间了,自己DIY项目后遇到了一个问题,项目不能使用WTP提供的Run On Server功能……

1、问题描述

配置好项目,配置好Tomcat6,加入项目到Tomcat中然后运行Tomcat没有加载项目的日志信息

2、环境配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
  <wb-module deploy-name="exercise-admin">
<property name="context-root" value="exercise-admin"/>
    		<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
 
        <wb-resource deploy-path="/" source-path="/src/main/webapp/js"/>
        <wb-resource deploy-path="/" source-path="/src/main/webapp/common"/>
        <wb-resource deploy-path="/" source-path="/src/main/webapp/WEB-INF/content"/>
        <wb-resource deploy-path="/" source-path="/src/main/webapp"/>
<property name="java-output-path" value="/target/classes"/>
  </wb-module>
</project-modules>

说明一下wtp的默认规则,org.eclipse.wst.common.component规定deploy-path为斜杠(/)并且是包含WEB-INF的wb-resource要在第一位,所以我在这里犯错了,看上面的配置就清楚了

3、问题原因

我一向喜欢“工欲善其事必先利其器”;因为基于Maven的WTP工程默认只有一个

<wb-resource deploy-path="/" source-path="/src/main/webapp"/>

看截图

Maven + WTP默认的WebResources


所以默认的.settings/org.eclipse.wst.common.component的配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
  <wb-module deploy-name="exercise-admin">
<property name="context-root" value="exercise-admin"/>
    		<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
 
        <wb-resource deploy-path="/" source-path="/src/main/webapp"/>
<property name="java-output-path" value="/target/classes"/>
  </wb-module>
</project-modules>

现在比较一下就比较清楚了,原因是我DIY的配置多了3行,所以我DIY的配置如下:

还有另外一个原因就是因为我的通过m2eclipse插件提供的SCM功能checkout项目,原本DIY配置好的项目被eclipse改动了,从svn信息看得出来,所以导致了问题的发生

4、问题关键所在

保证项目的.settings/org.eclipse.wst.common.component文件中的

<wb-resource deploy-path="/" source-path="/src/main/webapp"/>

在以deploy-path=”/”的wb-resource排在第一位,因为tomcat启动时要读取WEB-INF/web.xml,如果不在第一位找不到当然服务不能启动

5、问题解决

  • 根据上面说的保证webapp的位置即可,最终配置如下,可以保留DIY结果又可以启动服务:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    <?xml version="1.0" encoding="UTF-8"?>
    <project-modules id="moduleCoreId" project-version="1.5.0">
      <wb-module deploy-name="exercise-admin">
    <property name="context-root" value="exercise-admin"/>
        		<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
            <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/>
            <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
            <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
            <wb-resource deploy-path="/" source-path="/src/main/webapp"/>
            <wb-resource deploy-path="/" source-path="/src/main/webapp/js"/>
            <wb-resource deploy-path="/" source-path="/src/main/webapp/common"/>
            <wb-resource deploy-path="/" source-path="/src/main/webapp/WEB-INF/content"/>
    <property name="java-output-path" value="/target/classes"/>
      </wb-module>
    </project-modules>
  • 或者不要使用m2eclipse提供的SCM检出功能,直接用乌龟checkout,这样就不会因为eclipse自动设置修改.settings/org.eclipse.wst.common.component配置了

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: Eclipse+Maven+WTP+Tomcat不能Run On Server其中一个原因

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于Java和jQuery开发企业RIA应用

More Posts - Website

分享:Java日期工具类

平常开发中积累了一些,可能会和其他有重复,发上来按需取舍
包括:日期格式化、日期相加、日期排序等
因为在项目中要对一组无序日期排序并分组就写了一个方法,

/**
 * 日期分组<br />
 * 能够对指定日期列表按照连续性分组<br />
 * 例如:[2010-01-15, 2010-01-16, 2010-01-17, 2010-01-20, 2010-01-21, 2010-01-25]<br />
 * 分组结果为:<br />
 * <ul>
 * <li>[2010-01-15, 2010-01-16, 2010-01-17]</li>
 * <li>[2010-01-20, 2010-01-21]</li>
 * <li>[2010-01-25]</li>
 * </ul>
 * @param dates	日期对象
 * @return	连续性分组结果
 */
public static List<list <Date>> groupDates(List<date> dates) {}
</date></list>

感觉以后会用到所以放上来共享
继续阅读 »

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: 分享:Java日期工具类

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于Java和jQuery开发企业RIA应用

More Posts - Website

Json-lib 与 hibernate 共同使用的问题

Posted by: Andres Almiray on 05/01/2008 原文

hibernate使用CGLIB把POJO的domain对象动态代理,实现它的魔法,但是给JSON的序列化带来了麻烦,因为JSON无法对lazy的属性进行序列化。有以下的四个方法可以解决hibernate的序列化问题

  1. domain类实现JSONString接口
  2. 建立JsonConfig实例,并配置属性排除列表
  3. 用属性过滤器
  4. 写一个自定义的JsonBeanProcessor

1. 实现JSONString接口是侵入性最强的方法

public class Person implements JSONString {
   private String name;
   private String lastname;
   private Address address;
 
   // getters &amp; setters
 
   public String toJSONString() {
      return "{name:'"+name+"',lastname:'"+lastname+"'}";
   }
}
<span class="zbench-more-link"> <a href="http://www.wsria.com/archives/724#more-724" class="more-link">继续阅读 &raquo;</a></span>

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: Json-lib 与 hibernate 共同使用的问题

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于Java和jQuery开发企业RIA应用

More Posts - Website

使用hibernate和json-lib时忽略属性和集合

在使用Java语言开发项目的时候一般都是使用SSH架构,基本上大家没有例外,目前流利的Ajax技术给我们开发的系统了带来了不少的改善和性能方面的提高,去年开始学习了jQuery框架,因为使用Java语言做为后台而且jQuery中使用是目前数据结构良好的且方便的JSON做为数据传输方式,所以就在JSON官网找到了json-lib这个第三方JAR包,后来学习了一下就在finance系统中试用了一下,感觉不错;但是也遇到了一些问题,比如当我们映射了hibernate对象后,两个表做了关联,如下例子:

1
2
3
4
5
CREATE TABLE people(id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(20) NOT NULL);   
 
CREATE TABLE location(id BIGINT NOT NULL AUTO_INCREMENT,
        peopleId BIGINT NOT NULL,addr VARCHAR(20) NOT NULL,PRIMARY KEY(id,peopleId));

继续阅读 »

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: 使用hibernate和json-lib时忽略属性和集合

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于Java和jQuery开发企业RIA应用

More Posts - Website

Hibernate的映射类型 hibernate mysql映射类型

Hibernate 映射类型 Java 类型 标准 SQL 类型 大小和取值范围
integer 或者 int int 或者 java.lang.Integer INTEGER 4 字节
long long? Long BIGINT 8 字节
short short? Short SMALLINT 2 字节
byte byte? Byte TINYINT 1 字节
float float? Float FLOAT 4 字节
double double? Double DOUBLE 8 字节
big_decimal java.math.BigDecimal NUMERIC NUMERIC(8,2)8 位
character char? Character? String CHAR(1) 定长字符
string String VARCHAR 变长字符串
boolean boolean? Boolean BIT 布尔类型
yes_no boolean? Boolean CHAR(1) (Y-N) 布尔类型
true_false boolean? Boolean CHAR(1) (T-F) 布尔类型

2 、 Java 时间和日期类型的 Hibernate 映射

映射类型 Java 类型 标准 SQL 类型 描述
date util.Date 或者 sql.Date DATE YYYY-MM-DD
time Date??? Time TIME HH:MM:SS
timestamp Date?? Timestamp TIMESTAMP YYYYMMDDHHMMSS
calendar calendar TIMESTAMP YYYYMMDDHHMMSS
calendar_date calendar DATE YYYY-MM-DD

3 、 Java 大对象类型的 Hibernate 映射类型

映射类型 Java 类型 标准 SQL 类型 MySQL 类型 Oracle 类型
binary byte[] VARBINARY( 或 BLOB) BLOB BLOB
text String CLOB TEXT CLOB
serializable Serializable 接口任意实现类 VARBINARY( 或 BLOB) BLOB BLOB
clob java.sql.Clob CLOB TEXT CLOB
blob java.sql.Blob BLOB BLOB BLOB

在程序中通过 Hibernate 来保存 java.sql.Clob 或者 java.sql.Blob 实例时,必须包含两个步骤:

在一个数据库事务中先保存一个空的 Blob 或 Clob 实例。

接着锁定这条记录,更新上面保存的 Blob 或 Clob 实例,把二进制数据或文本数据写到 Blob 或 Clob 实例中

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: Hibernate的映射类型 hibernate mysql映射类型

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于Java和jQuery开发企业RIA应用

More Posts - Website

简单实现在基于Java的AJAX环境下未登录自动跳转流程详解(spring代理struts的action)

有过管理系统开发经验的程序员第一步肯定是做用户管理模块,当然可能会用到公司或者其他的产品,或者自己写用户管理模块,此模块主要的目的是区别每个用户的信息集合,限制用户的操作、数据列表等

今天讲的是用户登录问题,环境是基于JAVA语言,使用spring代理struts的Action,在使用spring创建的bean时执行一次验证拦截器来判断用户是否登录
下面进入正题:
继续阅读 »

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: 简单实现在基于Java的AJAX环境下未登录自动跳转流程详解(spring代理struts的action)

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于JavajQuery开发企业RIA应用

More Posts - Website

如何判断一个请求是否为AJAX请求

昨天在搞一个系统的时候遇到一个问题,我要在后台判断这个请求来自哪里,就是说是通过URL直接访问的呢还是通过AJAX方式访问的,以此来判断该怎么处理和响应,在群里面询问了一下也没有人知道,后来就想修改JQUERY的源码,就是在提交的时候在URL中加入自定义的AJAX请求标示,但是想想这样做不太好,破坏了JQUERY的完整性;继续在搜索,后来终于发现了,哈哈

那么服务器如果区别这个请求是ajax呢?因为同步和异步ajax的请求的头文件是一样的。我们如果通过X-Requested-With”=”XMLHttpRequest”来标识这个请求是ajax的请求。如果服务器硬是要区分的话,就可以通过获取该头部来判断。

这是来自一篇JQUERY的AJAX请求的文章,这样我在后台获取header属性中的”X-Requested-With”就可以知道是什么类型的请求了
附上Java代码:

/**
 * 判断是否为Ajax请求
 * @param request	HttpServletRequest
 * @return	是true, 否false
 */
public static boolean isAjaxRequest(HttpServletRequest request) {
	String requestType = request.getHeader("X-Requested-With");
	if (requestType != null && requestType.equals("XMLHttpRequest")) {
		return true;
	} else {
		return false;
	}
}

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: 如何判断一个请求是否为AJAX请求

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于JavajQuery开发企业RIA应用

More Posts - Website

实例解析java + jQuery + json工作过程(获取JSON数据)

前天刚刚写的一篇关于《实例解析java + ajax(jQuery) + json工作过程(登录)》的文章引起了网友们的关注和好评,

继续阅读 »

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: 实例解析java + jQuery + json工作过程(获取JSON数据)

无觅相关文章插件,快速提升流量

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于JavajQuery开发企业RIA应用

More Posts - Website

Page 1 of 212