posts - 78, comments - 34, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

     摘要: Struts2第二天,大家似乎没有从年假中苏醒过来,上课显得有些疲惫。不过还好,听课效果还不错。今日的主要内容是OGNL,Struts2使用OGNL访问contextMap和valueStack。老张很执着,他在研究Struts2时遇到的一些问题,一定要解决,并且要详细解决。通过他在讲课中,我们可以看出这一点。有开发经验的人都知道,我们时而被陌生技术的一个小细节搞的晕头转向,耗费了大半天的时间我们...  阅读全文

posted @ 2010-02-22 16:59 長城 阅读(739) | 评论 (0)编辑 收藏

     摘要:          春节假期终于结束了,假期内在北京只出去转了两天,感觉很好!剩余时间呆在屋子里写了个练习程序收获颇丰。          依然迫不及待,迫不及待的学完课程赶紧回大连。我想除了我,很多同学和网友也都期待着今天由张考祥老师主讲的Strut...  阅读全文

posted @ 2010-02-20 23:56 長城 阅读(572) | 评论 (0)编辑 收藏

     摘要:          今日教育办公系统结束。新内容有:导出数据到PDF文档、生成图表(饼图、柱图...),整体上操作比较简单。   一、创建PDF文档          我们使用iText创建PDF文档,需要到http://itext...  阅读全文

posted @ 2010-02-09 01:25 長城 阅读(478) | 评论 (0)编辑 收藏

     摘要:          今日我们已经将权限模块与员工管理整合完毕,但下午有学习新的内容。将数据导出为excel表格,或从excel表格导入数据。这一项功能比较常用!在Windows平台下微软有为我们提供Office的COM套件,Apache为我们提供的poi正是为Java打造的Office套件。    &...  阅读全文

posted @ 2010-02-08 00:30 長城 阅读(381) | 评论 (0)编辑 收藏

spring-security最后一天,今天的主要内容是将需要指定权限才可以访问的资源放到数据库中,脱离applicationContext.xml配置文件。然后我们将近两天学习的srping-security整合到教育办公系统中。


我们继续昨天的内容,将资源文件信息保存到数据库中。



1.applicationContext.xml

将昨天applicationContext.xml“配置SpringSecurityhttp安全服务”部分的内容替换为:

<sec:http auto-config="true" session-fixation-protection="none" />

<bean

class="org.springframework.security.intercept.web.FilterSecurityInterceptor"

autowire="byType">

<sec:custom-filter before="AUTHENTICATION_PROCESSING_FILTER"/>

<property name="objectDefinitionSource" ref="objectDefinitionSource"/>

</bean>

这里的objectDefinitionSource是下边的类,cutom-filter是在调用AUTHENTICATION_PROCESSING_FILTER过滤器之前调用FilterSecurityInterceptor


2.添加数据表

resc表与role表是多对多关系。


1).resc

image

2).resc_role

image

3.相关类

要让spring-security可以从数据库中获取相关资源信息,我们必须编写一个实现FactoryBean接口的类。

package cn.itcast.cc.spring.security;


import java.util.LinkedHashMap;

import java.util.Map;

import javax.annotation.Resource;

import org.springframework.beans.factory.FactoryBean;

import org.springframework.security.ConfigAttributeDefinition;

import org.springframework.security.ConfigAttributeEditor;

import org.springframework.security.intercept.web.DefaultFilterInvocationDefinitionSource;

import org.springframework.security.intercept.web.RequestKey;

import org.springframework.security.util.AntUrlPathMatcher;

import org.springframework.security.util.UrlMatcher;

import org.springframework.stereotype.Component;


@Component("objectDefinitionSource")

public class DefaultFilterInvocationDefinitionSourceImpl implements FactoryBean {


@Resource

ResourceDetailsService resourceDetailsService;


private UrlMatcher getUrlMatcher() {

UrlMatcher urlMatcher = new AntUrlPathMatcher();

return urlMatcher;

}


@Override

public Object getObject() throws Exception {

UrlMatcher urlMatcher = this.getUrlMatcher();

// 获取数据Map

Map<String, String> srcMap = resourceDetailsService.buildRequestMap();

LinkedHashMap<RequestKey, Object> requestMap = new LinkedHashMap<RequestKey, Object>();

ConfigAttributeEditor editor = new ConfigAttributeEditor();

// 转换数据Map

for (Map.Entry<String, String> entry : srcMap.entrySet()) {

String url = entry.getKey();

String roles = entry.getValue();

if (roles != null) {

editor.setAsText(roles);

requestMap.put(new RequestKey(url), editor.getValue());

} else {

requestMap.put(new RequestKey(url), ConfigAttributeDefinition.NO_ATTRIBUTES);

}

}

// 生成并返回对象

return new DefaultFilterInvocationDefinitionSource(urlMatcher,

requestMap);

}


@Override

public Class getObjectType() {

return null;

}


@Override

public boolean isSingleton() {

return false;

}


}


其中ResourceDetailsService接口的实现类如下:

package cn.itcast.cc.spring.security;


import java.util.HashMap;

import java.util.List;

import java.util.Map;

import javax.annotation.Resource;

import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;

import org.springframework.stereotype.Component;


@Component("userDetailsService")

public class ResourceDetailsServiceImpl implements ResourceDetailsService {


@Resource

private SimpleJdbcTemplate jdbcTemplate;

@Override

public Map<String, String> buildRequestMap() {

// 注意:这里需要使用左外连接查询,是因为有些页面没有指定role

// 即,任何权限都不可以访问的页面!

String sql = "SELECT res_string as url,r.name as role " +

"FROME resc LEFT JOIN resc_role rr ON rr.resc_id = resc.id " +

"LEFT JOIN role r ON rr.role_id = r.id";

List<Map<String, Object>> results = this.jdbcTemplate.queryForList(sql);

Map<String, String> srcMap = new HashMap<String, String>();

// 将查询后的数据拼接并放入到Map

for(Map<String,Object> val:results){

String url = (String) val.get("url");

String role = (String) val.get("role");

if(srcMap.containsKey(url)){

role = srcMap.get(url) + "," + role;

}

srcMap.put(url, role);

}

return srcMap;

}

}


Spring-security还为我们提供了其他实用的辅助功能,具体的google一下吧!

posted @ 2010-02-04 23:18 長城 阅读(404) | 评论 (0)编辑 收藏

     摘要:          有没有发现一个问题,我们之前做的所有练习,都没的权限管理这个模块。我们的WEB应用中的同一个帐户可以在多台机器上同时登陆,每一个用户可以操作所有功能模块。这样在以后的应用开发中是结对不可行的!          &nb...  阅读全文

posted @ 2010-02-03 23:52 長城 阅读(2621) | 评论 (0)编辑 收藏

 

        今天重点内容是AJAX技术在教育办公系统中V层的应用,实现的功能有:AJAX分页查询、AJAX删除、AJAX修改。

        还记得学习AJAX时使用JQuery向服务器发送请求,并在回调函数中将返回的数据动态插入到DOM的某处吗?Yes,我们今天主要就是玩这个技术。感觉没什么好总结的,就是叠代码、串代码,没什么新鲜东西。


        但我想说的是看着佟佟搞着代码,操作着页面多少有些恶心。因为我以前是做桌面的组件没这么麻烦,也没这么灵活,但目标都是一样的——显示数据,提供给用户查询或编辑。所以我要思考一个问题,将分页、DAOAJAX操作封装成像桌面软件的组件那样方便易用,其实已经实现了通用分页和DAO。关于页面AJAX并不理想,虽然JQuery有很多插件,但从这两天的内容来看插件的操作并不理想,有时间我要为此多研究研究。

        明天的内容比较有吸引力!哈哈!


 

posted @ 2010-02-02 21:33 長城 阅读(290) | 评论 (0)编辑 收藏

 

         每次学习项目或者新的知识时,都 不能建立宏观的了解。中午或者晚上需要回来整理一下,才能对所学的知识有个宏观的了解(框架的了解)。我们现在做的这个项目,似乎一直学习的是新知识,其实并不是。而是Java的高级用法,它让我感觉到了Java的强悍。


         今日重点通用分页功能,几乎每一个像样些的练习都有分页功能,它如此重要!今天的分页功能是通用的,适用于任何WEB应用。基于昨天的两个工具类,今天新添加了一个HibernateDao 扩展了SimpleHibernateDao。这个DAO除了进行常规的CURD操作,还为我们提供了分页功能和多条件模糊查询功能,用起来更方便。

 

         下面是查询分页信息操作的时序图:


         (如有需要代码的,可以给我留言!)   

 

    项目整体上来说并不难,只要抓住了项目的框架和重点内容。什么才是最难的?自己动手实践才是最难的。来传智播客学习已经三个月了,我一直坚持着整理学习日志,想将每天的学习重点都详细的整理出来,但那根本不现实,因为学习内容太丰富了。我也有动手去实践那些重点的内容,但效果并不另我满意。我想我应该拿出更多的时间去实践,但写日志占用了我大部分时间!

 

         有失必有得,这都是个人的选择。我之所以写日志,是想练习自己对文章框架和知识结构的整理能力。做为一个优秀的程序员,我想这一点是十分重要的。我在这方面得到了一定的提升,别我欣慰。但仍然需要继续努力!说心里话,我的文章结构还差的很,因为没有经过细心整理和校验。

 

         我想我应该灵活的去处理实践与写作的时间,当实践变得重要时就应该拿出大部分时间给实践。当理论性知识重要时,更应该拿出些时间去写日志。嗯,就这么做吧!还有一个月20天课程就结束了!

posted @ 2010-01-31 23:55 長城 阅读(2046) | 评论 (5)编辑 收藏

     摘要:          东西好多啊,我的编写进度是跟不上了。把重点日志好好整理一下!以前编写的练习主要是练习基本功,现今的练习是要是怎么快怎么来。比如分页功能,以前是靠自己手动一点一点的写。而如今一个插件搞定,而且功能十分强大。          ...  阅读全文

posted @ 2010-01-30 23:11 長城 阅读(949) | 评论 (0)编辑 收藏

     摘要: 今天是教育办公系统的第一天,我本以为这个系统是一个全面些,功能强的项目。实际确实如此,功能强大、全面!但我们只需要完成其中的一小部分,核心的部分。其实想想,这么好的一个系统,如果真把它做出来并通过测试,我估计至少需要二个月左右的时间。而我们只有9天的时间,这9天的时间将项目的核心部分学习一下还是相当不错的。 其实在企业开发中,这种规模的项目是不可以由一个人来完成的。所以从这个角度考虑,我...  阅读全文

posted @ 2010-01-30 00:31 長城 阅读(619) | 评论 (0)编辑 收藏

仅列出标题
共8页: 上一页 1 2 3 4 5 6 7 8 下一页