|
Posted on 2006-12-02 16:05 碼農cz 閱讀(287) 評論(0) 編輯 收藏 所屬分類: Spring Around
工程結構如此圖: ?? 
在web-inf下如此圖:
這里,沒有用test-case因為比較簡單,所以,我們赤膊上陣:
?1
#authorities.sql如下:
?2
?3
?????
CREATE
?
TABLE
?`authorities`?(
?4
??`AUTH_ID`?
INTEGER
(
11
)?
NOT
?
NULL
?
DEFAULT
?
'
0
'
,
?5
??`AUTHORITY`?
VARCHAR
(
255
)?
NOT
?
NULL
,
?6
??`AUTH_TYPE`?
VARCHAR
(
32
)?
NOT
?
NULL
,
?7
??`PROTECTED_RES`?
VARCHAR
(
64
)?
NOT
?
NULL
,
?8
??`DISPLAY`?
VARCHAR
(
64
)?
NOT
?
NULL
,
?9
??`NOTE`?
VARCHAR
(
64
)?
DEFAULT
?
NULL
,
10
??
PRIMARY
?
KEY
?(`AUTH_ID`),
11
??
UNIQUE
?
KEY
?`AUTH_ID`?(`AUTH_ID`)
12
);
13
14
COMMIT
;
15
16
INSERT
?
INTO
?`authorities`?(`AUTH_ID`,?`AUTHORITY`,?`AUTH_TYPE`,?`PROTECTED_RES`,?`DISPLAY`,?`NOTE`)?
VALUES
?
17
??(
1
,
'
AUTH_FUNC_ContactManager.create
'
,
'
FUNCTION
'
,
'
sample.service.IContactManager.create
'
,
'
創建聯系人
'
,
NULL
),
18
??(
2
,
'
AUTH_FUNC_ContactManager.delete
'
,
'
FUNCTION
'
,
'
sample.service.IContactManager.delete
'
,
'
刪除聯系人
'
,
NULL
),
19
??(
3
,
'
AUTH_FUNC_ContactManager.getAll
'
,
'
FUNCTION
'
,
'
sample.service.IContactManager.getAll
'
,
'
取聯系人列表
'
,
NULL
),
20
??(
4
,
'
AUTH_FUNC_ContactManager.getById
'
,
'
FUNCTION
'
,
'
sample.service.IContactManager.getById
'
,
'
根據ID取聯系人
'
,
NULL
),
21
??(
5
,
'
AUTH_FUNC_ContactManager.update
'
,
'
FUNCTION
'
,
'
sample.service.IContactManager.update
'
,
'
更新聯系人信息
'
,
NULL
),
22
??(
0
,
'
AUTH_USER
'
,
'
USER
'
,
'
USER
'
,
'
一般用戶權限
'
,
NULL
);
23
24
25
##contacts.sql如下:
26
27
CREATE
?
TABLE
?`contacts`?(
28
??`ID`?
INTEGER
(
11
)?
NOT
?
NULL
?AUTO_INCREMENT,
29
??`CONTACT_NAME`?
VARCHAR
(
50
)?
NOT
?
NULL
,
30
??`EMAIL`?
VARCHAR
(
50
)?
DEFAULT
?
NULL
,
31
??
PRIMARY
?
KEY
?(`ID`),
32
??
UNIQUE
?
KEY
?`ID`?(`ID`)
33
);
34
35
COMMIT
;
36
37
INSERT
?
INTO
?`contacts`?(`ID`,?`CONTACT_NAME`,?`EMAIL`)?
VALUES
?
38
??(
1
,
'
contact1
'
,
'
contact1@sample.com
'
),
39
??(
2
,
'
contact2
'
,
'
contact2@sample.com
'
),
40
??(
3
,
'
contact3
'
,
'
contact3@sample.com
'
),
41
??(
5
,
'
contact22asdasd
'
,
'
contact1@sample.com
'
),
42
??(
10
,
'
1`23123123
'
,
'
aaaa
'
);
43
44
45
##user_auth.sql如下:
46
47
CREATE
?
TABLE
?`user_auth`?(
48
??`
USER_ID
`?
INTEGER
(
11
)?
NOT
?
NULL
?
DEFAULT
?
'
0
'
,
49
??`AUTH_ID`?
INTEGER
(
11
)?
NOT
?
NULL
?
DEFAULT
?
'
0
'
,
50
??
PRIMARY
?
KEY
?(`
USER_ID
`,?`AUTH_ID`)
51
);
52
53
COMMIT
;
54
55
INSERT
?
INTO
?`user_auth`?(`
USER_ID
`,?`AUTH_ID`)?
VALUES
?
56
??(
1
,
0
),
57
??(
1
,
1
),
58
??(
1
,
2
),
59
??(
1
,
3
),
60
??(
1
,
4
),
61
??(
1
,
5
),
62
??(
2
,
0
),
63
??(
2
,
3
),
64
??(
2
,
4
);
65
66
67
##userinfo.sql如下:
68
69
CREATE
?
TABLE
?`userinfo`?(
70
??`
USER_ID
`?
INTEGER
(
11
)?
NOT
?
NULL
?AUTO_INCREMENT,
71
??`USERNAME`?
VARCHAR
(
10
)?
NOT
?
NULL
,
72
??`PASSWORD`?
VARCHAR
(
30
)?
DEFAULT
?
NULL
,
73
??`ENABLED`?
TINYINT
(
1
)?
NOT
?
NULL
?
DEFAULT
?
'
0
'
,
74
??
PRIMARY
?
KEY
?(`
USER_ID
`),
75
??
UNIQUE
?
KEY
?`
USER_ID
`?(`
USER_ID
`),
76
??
UNIQUE
?
KEY
?`USERNAME`?(`USERNAME`)
77
);
78
79
COMMIT
;
80
81
INSERT
?
INTO
?`userinfo`?(`
USER_ID
`,?`USERNAME`,?`PASSWORD`,?`ENABLED`)?
VALUES
?
82
??(
1
,
'
root
'
,
'
root
'
,
1
),
83
??(
2
,
'
readonly
'
,
'
readonly
'
,
1
);
84
85
86
下面是java代碼,太多了都放在一起吧 ??1 IContactDao接口: ??2 ??3 ?package?sample.dao; ??4 ??5 import?sample.Contact; ??6 ??7 import?java.util.List; ??8 ??9 public?interface?IContactDao { ?10 ??public?Contact?getById(Integer?id); ?11 ??public?void?create(Contact?contact); ?12 ??public?void?delete(Integer?contactId); ?13 ??public?List?findAll(); ?14 ??public?void?update(Contact?contact); ?15 } ?16 ?17 ?18 ContactDao: ?19 ?20 /**//* ?21 ?*?@(#)ContactDao.java? ?22 ?*/ ?23 package?sample.dao.impl; ?24 ?25 import?org.springframework.jdbc.core.support.JdbcDaoSupport; ?26 import?org.springframework.jdbc.core.SqlParameter; ?27 import?org.springframework.jdbc.object.SqlUpdate; ?28 import?org.springframework.jdbc.object.MappingSqlQuery; ?29 import?sample.dao.IContactDao; ?30 import?sample.Contact; ?31 ?32 import?javax.sql.DataSource; ?33 import?java.sql.Types; ?34 import?java.sql.ResultSet; ?35 import?java.sql.SQLException; ?36 import?java.util.List; ?37 ?38 public?class?ContactDao?extends?JdbcDaoSupport?implements?IContactDao { ?39 ??private?ContactDelete?contactDelete; ?40 ??private?ContactInsert?contactInsert; ?41 ??private?ContactUpdate?contactUpdate; ?42 ??private?ContactsAllQuery?contactsAllQuery; ?43 ??private?ContactsByIdQuery?contactsByIdQuery; ?44 ?45 ??//~?Methods?================================================================ ?46 ?47 ??public?Contact?getById(Integer?id) { ?48 ????List?list=contactsByIdQuery.execute(id.intValue()); ?49 ????if(list.size()==0) { ?50 ??????return?null; ?51 ????}?else { ?52 ??????return?(Contact)list.get(0); ?53 ????} ?54 ??} ?55 ?56 ??public?void?create(Contact?contact) { ?57 ????contactInsert.insert(contact); ?58 ??} ?59 ?60 ??public?void?delete(Integer?contactId) { ?61 ????contactDelete.delete(contactId); ?62 ??} ?63 ?64 ??public?List?findAll() { ?65 ????return?contactsAllQuery.execute(); ?66 ??} ?67 ?68 ??public?void?update(Contact?contact)? { ?69 ??????contactUpdate.update(contact); ?70 ??} ?71 ?72 ??protected?void?initDao()?throws?Exception { ?73 ????contactInsert=new?ContactInsert(getDataSource()); ?74 ????contactUpdate=new?ContactUpdate(getDataSource()); ?75 ????contactDelete=new?ContactDelete(getDataSource()); ?76 ????contactsAllQuery=new?ContactsAllQuery(getDataSource()); ?77 ????contactsByIdQuery=new?ContactsByIdQuery(getDataSource()); ?78 ??} ?79 ?80 ?81 ??protected?class?ContactDelete?extends?SqlUpdate { ?82 ????protected?ContactDelete(DataSource?ds) { ?83 ??????super(ds,?"DELETE?FROM?contacts?WHERE?id?=??"); ?84 ??????declareParameter(new?SqlParameter(Types.INTEGER)); ?85 ??????compile(); ?86 ????} ?87 ?88 ????protected?void?delete(Integer?contactId) { ?89 ??????super.update(contactId.intValue()); ?90 ????} ?91 ??} ?92 ?93 ??protected?class?ContactInsert?extends?SqlUpdate { ?94 ????protected?ContactInsert(DataSource?ds) { ?95 ??????super(ds,?"INSERT?INTO?contacts?(?CONTACT_NAME,?EMAIL)?VALUES?(?,?)"); ?96 ??????declareParameter(new?SqlParameter(Types.VARCHAR)); ?97 ??????declareParameter(new?SqlParameter(Types.VARCHAR)); ?98 ??????compile(); ?99 ????} 100 101 ????protected?void?insert(Contact?contact) { 102 ??????Object[]?objs=new?Object[] {contact.getName(),contact?.getEmail()}; 103 ??????super.update(objs); 104 ????} 105 ??} 106 107 ??protected?class?ContactUpdate?extends?SqlUpdate { 108 ????protected?ContactUpdate(DataSource?ds) { 109 ??????super(ds, 110 ????????????"UPDATE?contacts?SET?contact_name?=??,?email?=???WHERE?id?=??" 111 ??????); 112 ??????declareParameter(new?SqlParameter(Types.VARCHAR)); 113 ??????declareParameter(new?SqlParameter(Types.VARCHAR)); 114 ??????declareParameter(new?SqlParameter(Types.INTEGER)); 115 ??????compile(); 116 ????} 117 118 ????protected?void?update(Contact?contact) { 119 ??????Object[]?objs=new?Object[] {contact.getName(),contact.getEmail(),contact 120 ????????.getId()}; 121 ??????super.update(objs); 122 ????} 123 ??} 124 125 ??protected?class?ContactsAllQuery?extends?MappingSqlQuery { 126 ????protected?ContactsAllQuery(DataSource?ds) { 127 ??????super(ds,?"SELECT?id,?contact_name,?email?FROM?contacts?ORDER?BY?id"); 128 ??????compile(); 129 ????} 130 131 ????protected?Object?mapRow(ResultSet?rs,?int?rownum) 132 ??????throws?SQLException { 133 ??????Contact?contact=new?Contact(); 134 ??????contact.setId(new?Integer(rs.getInt("id"))); 135 ??????contact.setName(rs.getString("contact_name")); 136 ??????contact.setEmail(rs.getString("email")); 137 138 ??????return?contact; 139 ????} 140 ??} 141 142 ??protected?class?ContactsByIdQuery?extends?MappingSqlQuery { 143 ????protected?ContactsByIdQuery(DataSource?ds) { 144 ??????super(ds, 145 ????????????"SELECT?id,?contact_name,?email?FROM?contacts?WHERE?id?=???ORDER?BY?id" 146 ??????); 147 ??????declareParameter(new?SqlParameter(Types.INTEGER)); 148 ??????compile(); 149 ????} 150 151 ????protected?Object?mapRow(ResultSet?rs,?int?rownum) 152 ??????throws?SQLException { 153 ??????Contact?contact=new?Contact(); 154 ??????contact.setId(new?Integer(rs.getInt("id"))); 155 ??????contact.setName(rs.getString("contact_name")); 156 ??????contact.setEmail(rs.getString("email")); 157 158 ??????return?contact; 159 ????} 160 ??} 161 162 } 163 164 165 166 IContactManager: 167 168 /**//* 169 ?*?@(#)IContactManager.java? 170 ?* 171 ?*?Copyright?2003?Copyright.com,?Inc.?All?rights?reserved. 172 ?*?Use?is?subject?to?license?terms. 173 ?*/ 174 package?sample.service; 175 176 import?sample.Contact; 177 178 import?java.util.List; 179 180 181 public?interface?IContactManager { 182 ??public?List?getAll(); 183 ??public?Contact?getById(Integer?id); 184 ??public?void?create(Contact?contact); 185 ??public?void?update(Contact?contact); 186 ??public?void?delete(Contact?contact); 187 } 188 189 190 ContactManager: 191 192 /**//* 193 ?*?@(#)ContactManager.java? 194 ?* 195 ?*?Copyright?2003?Copyright.com?,?Inc.?All?rights?reserved. 196 ?*?Use?is?subject?to?license?terms. 197 ?*/ 198 package?sample.service.impl; 199 200 import?sample.service.IContactManager; 201 import?sample.Contact; 202 import?sample.dao.impl.ContactDao; 203 204 import?java.util.List; 205 206 public?class?ContactManager?implements?IContactManager { 207 ??private?ContactDao?contactDao; 208 ??public?void?setContactDao(ContactDao?contactDao)? { 209 ??????this.contactDao?=?contactDao; 210 ??} 211 212 ??public?ContactDao?getContactDao()? { 213 ??????return?contactDao; 214 ??} 215 216 ??public?void?create(Contact?contact) { 217 ????contactDao.create(contact); 218 ??} 219 220 ??public?void?delete(Contact?contact) { 221 ????contactDao.delete(contact.getId()); 222 ??} 223 224 ??public?List?getAll() { 225 ????return?contactDao.findAll(); 226 ??} 227 228 ??public?Contact?getById(Integer?id) { 229 ????return?contactDao.getById(id); 230 ??} 231 232 ??public?void?update(Contact?contact) { 233 ????contactDao.update(contact); 234 ??} 235 } 236 237 238 DataSourceMethodDefinitionSourceEditor 239 240 /**//* 241 ?*?@(#)DataSourceMethodDefinitionSourceEditor.java? 242 ?* 243 ?*?Copyright?2003?Copyright.com?,?Inc.?All?rights?reserved. 244 ?*?Use?is?subject?to?license?terms. 245 ?*/ 246 package?sample.util; 247 248 import?net.sf.acegisecurity.intercept.method.MethodDefinitionMap; 249 import?net.sf.acegisecurity.ConfigAttributeEditor; 250 import?net.sf.acegisecurity.ConfigAttributeDefinition; 251 252 import?java.util.List; 253 import?java.util.Iterator; 254 import?java.util.Map; 255 import?java.beans.PropertyEditorSupport; 256 257 import?org.springframework.jdbc.core.support.JdbcDaoSupport; 258 import?org.springframework.jdbc.core.JdbcTemplate; 259 260 261 public?class?DataSourceMethodDefinitionSourceEditor?extends?PropertyEditorSupport { 262 ??protected?JdbcTemplate?jdbcTemplate; 263 ??//~?Methods?================================================================ 264 ??public?JdbcTemplate?getJdbcTemplate() { 265 ????return?jdbcTemplate; 266 ??} 267 268 ??public?void?setJdbcTemplate(JdbcTemplate?jdbcTemplate) { 269 ????this.jdbcTemplate=jdbcTemplate; 270 ??} 271 272 ??public?void?setAsText(String?s)?throws?IllegalArgumentException { 273 ????MethodDefinitionMap?source=new?MethodDefinitionMap(); 274 ????List?rs; 275 ????try { 276 ??????rs=jdbcTemplate.queryForList(s); 277 ????}?catch(Exception?e) { 278 ??????setValue(source); 279 ??????e.printStackTrace(); 280 ??????return; 281 ????} 282 ????if((rs==null)||rs.size()==0) { 283 ??????//?Leave?value?in?property?editor?null 284 ????}?else { 285 ??????//?Now?we?have?properties,?process?each?one?individually 286 ??????ConfigAttributeEditor?configAttribEd=new?ConfigAttributeEditor(); 287 288 ??????for(Iterator?iter=rs.iterator();iter.hasNext();) { 289 ????????Map?row=(Map)iter.next(); 290 ????????String?authority=(String)row.get("AUTHORITY"); 291 ????????String?resource=(String)row.get("PROTECTED_RES"); 292 ????????if((null==authority)||(resource==null)) { 293 ??????????continue; 294 ????????} 295 ????????//?Convert?value?to?series?of?security?configuration?attributes 296 ????????configAttribEd.setAsText(authority); 297 ????????ConfigAttributeDefinition?attr=(ConfigAttributeDefinition)configAttribEd?.getValue(); 298 ????????//?Register?name?and?attribute 299 ????????source.addSecureMethod(resource,?attr); 300 ??????} 301 ????} 302 ????setValue(source); 303 ??} 304 305 } 306 307 308 Contact?: 309 310 package?sample; 311 312 import?java.io.Serializable; 313 /**?*//** 314 ?*?@author?@2006-11-10">cuizhen@risesoft.net">@2006-11-10?上午10:34:01 315 ?*/ 316 public?class?Contact?implements?Serializable { 317 ??//~?Instance?fields?======================================================== 318 ??private?Integer?id; 319 ??private?String?email; 320 ??private?String?name; 321 ??//~?Constructors?=========================================================== 322 323 ??public?Contact(String?name,?String?email) { 324 ????this.name=name; 325 ????this.email=email; 326 ??} 327 328 ??public?Contact() { 329 ??} 330 ??//~?Methods?================================================================ 331 332 ??/**?*//** 333 ???*?DOCUMENT?ME! 334 ???* 335 ???*?@param?email?The?email?to?set. 336 ???*/ 337 ??public?void?setEmail(String?email) { 338 ????this.email=email; 339 ??} 340 341 ??/**?*//** 342 ???*?DOCUMENT?ME! 343 ???* 344 ???*?@return?Returns?the?email. 345 ???*/ 346 ??public?String?getEmail() { 347 ????return?email; 348 ??} 349 350 ??public?void?setId(Integer?id) { 351 ????this.id=id; 352 ??} 353 354 ??/**?*//** 355 ???*?DOCUMENT?ME! 356 ???* 357 ???*?@return?Returns?the?id. 358 ???*/ 359 ??public?Integer?getId() { 360 ????return?id; 361 ??} 362 363 ??/**?*//** 364 ???*?DOCUMENT?ME! 365 ???* 366 ???*?@param?name?The?name?to?set. 367 ???*/ 368 ??public?void?setName(String?name) { 369 ????this.name=name; 370 ??} 371 372 ??/**?*//** 373 ???*?DOCUMENT?ME! 374 ???* 375 ???*?@return?Returns?the?name. 376 ???*/ 377 ??public?String?getName() { 378 ????return?name; 379 ??} 380 381 ??public?String?toString() { 382 ????StringBuffer?sb=new?StringBuffer(); 383 ????sb.append(super.toString()+":?"); 384 ????sb.append("Id:?"+this.getId()+";?"); 385 ????sb.append("Name:?"+this.getName()+";?"); 386 ????sb.append("Email:?"+this.getEmail()); 387 388 ????return?sb.toString(); 389 ??} 390 } 391 392 393 log4j: 394 395 #?Global?logging?configuration 396 log4j.rootLogger=WARN,?stdout,?fileout 397 #?Console?output 398 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 399 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 400 log4j.appender.stdout.layout.conversionPattern=[%p,%c {1},%t]?%m%n 401 402 #?Rolling?log?file?output 403 log4j.appender.fileout=org.apache.log4j.RollingFileAppender 404 log4j.appender.fileout.File=contacts.log 405 #log4j.appender.fileout.File=$ {webapp.root}/WEB-INF/log4j.log 406 log4j.appender.fileout.MaxFileSize=1024KB 407 log4j.appender.fileout.MaxBackupIndex=1 408 log4j.appender.fileout.layout=org.apache.log4j.PatternLayout 409 log4j.appender.fileout.layout.conversionPattern=%d {ABSOLUTE}?%5p?%c {1},%t:%L?-?%m%n 410 411 412 累死了……下面是配置xml ??1 WebRoot/WEB-INF/applicationContext-basic.xml ??2 ??3 ??4 ??5 ? ??6 ??7 ??8 <?xml?version="1.0"?encoding="UTF-8"?> ??9 ?10 ?11 <!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd"> ?12 ?13 ?14 ?15 ? ?16 ?17 ?18 <beans> ?19 ?20 ?21 ??<bean?id="dataSource"?class="com.mchange.v2.c3p0.ComboPooledDataSource"?destroy-method="close"> ?22 ?23 ?24 ????<property?name="driverClass"> ?25 ?26 ?27 ??????<value>com.mysql.jdbc.Driver</value> ?28 ?29 ?30 ????</property> ?31 ?32 ?33 ????<property?name="jdbcUrl"> ?34 ?35 ?36 ??????<value>jdbc:mysql://localhost:3306/tt</value> ?37 ?38 ?39 ????</property> ?40 ?41 ?42 ????<property?name="user"> ?43 ?44 ?45 ??????<value>root</value> ?46 ?47 ?48 ????</property> ?49 ?50 ?51 ????<property?name="password"> ?52 ?53 ?54 ??????<value>123</value> ?55 ?56 ?57 ????</property> ?58 ?59 ?60 ????<property?name="initialPoolSize"> ?61 ?62 ?63 ??????<value>10</value> ?64 ?65 ?66 ????</property> ?67 ?68 ?69 ????<property?name="minPoolSize"> ?70 ?71 ?72 ??????<value>10</value> ?73 ?74 ?75 ????</property> ?76 ?77 ?78 ????<property?name="maxPoolSize"> ?79 ?80 ?81 ??????<value>50</value> ?82 ?83 ?84 ????</property> ?85 ?86 ?87 ????<property?name="checkoutTimeout"> ?88 ?89 ?90 ??????<value>5000</value> ?91 ?92 ?93 ????</property> ?94 ?95 ?96 ????<property?name="maxIdleTime"> ?97 ?98 ?99 ??????<value>1800</value> 100 101 102 ????</property> 103 104 105 ????<property?name="idleConnectionTestPeriod"> 106 107 108 ??????<value>3000</value> 109 110 111 ????</property> 112 113 114 ????<property?name="acquireIncrement"> 115 116 117 ??????<value>5</value> 118 119 120 ????</property> 121 122 123 ??</bean> 124 125 126 127 ? 128 129 130 ??<bean?id="transactionManager"?class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 131 132 133 ????<property?name="dataSource"> 134 135 136 ??????<ref?local="dataSource"/> 137 138 139 ????</property> 140 141 142 ??</bean> 143 144 145 146 ? 147 148 149 ??<bean?id="jdbcTemplate"?class="org.springframework.jdbc.core.JdbcTemplate"> 150 151 152 ????<property?name="dataSource"> 153 154 155 ??????<ref?bean="dataSource"/> 156 157 158 ????</property> 159 160 161 ??</bean> 162 163 164 165 ? 166 167 168 ??<bean?id="businessAccessDecisionManager"?class="net.sf.acegisecurity.vote.AffirmativeBased"> 169 170 171 ?????<property?name="allowIfAllAbstainDecisions"><value>false</value></property> 172 173 174 ?????<property?name="decisionVoters"> 175 176 177 ????????<list> 178 179 180 ???????????<ref?bean="roleVoter"/> 181 182 183 ????????</list> 184
|