主題:spring安全框架應用

 

第一步
將spring-security-core-2.0.3.jar和spring-security-taglibs-2.0.3.jar包加入工程,修改原有的jsp代碼,將登錄的驗證放到action中處理,更改index.jsp的form提交的action代碼。
文件路徑:ezg2.7\WebRoot\index.jsp

Html代碼
<!--<form name="loginActionForm" id="loginActionForm" method="post" action="[color=red]login.do[/color]" target="_parent" οnsubmit="return login()">-->
<form name="loginActionForm" id="loginActionForm" method="post" action="[color=red]j_spring_security_check[/color]"" target="_parent" οnsubmit="return login()">

<!--<form name="loginActionForm" id="loginActionForm" method="post" action="[color=red]login.do[/color]" target="_parent" οnsubmit="return login()">-->
<form name="loginActionForm" id="loginActionForm" method="post" action="[color=red]j_spring_security_check[/color]"" target="_parent" οnsubmit="return login()">



第二步
新建TAB_MOA_MODULE表的hibernate映射文件和pojo文件,映射文件加入hibernate配置文件
文件路徑:
ezg2.7\src\com\srt\sdp\security\model\TabMoaModule.hbm.xml
ezg2.7\src\com\srt\sdp\security\model\TabMoaModule.java
ezg2.7\src\conf\hibernate.cfg.xml
Xml代碼
<mapping resource="com/srt/sdp/security/model/TabMoaModule.hbm.xml" />

<mapping resource="com/srt/sdp/security/model/TabMoaModule.hbm.xml" />



第三步
修改資源DAO對象,從TAB_MOA_MODULE表獲取資源。修改映射文件,加入sql語句
文件路徑:
ezg2.7\src\com\srt\sdp\security\dao\hibernate\ResourceDao.java
ezg2.7\src\com\srt\sdp\security\model\TabMoaModule.hbm.xml
Xml代碼
<query name="getResources">
<![CDATA[FROM TabMoaModule]>
</query>

<query name="getResources">
<![CDATA[FROM TabMoaModule]>
</query>
Java代碼
public List<TabMoaModule> getResources() {
return getSession().getNamedQuery("getResources").list();//123
}

public List<TabMoaModule> getResources() {
return getSession().getNamedQuery("getResources").list();//123
}



第四步
修改安全框架初始化加載資源的代碼,將權限code和url放入spring安全框架
文件路徑:ezg2.7\src\com\srt\sdp\security\bean\ResourceDetailsService.java
Java代碼
List<TabMoaModule> resources = resourceDao.getResources();
for (TabMoaModule resource : resources) {
String authorityCode = resource.getPerm_code();
List<String> urlList = new ArrayList<String>();

// 讀取資源裏面的url
if (resource.getModuleUrl() != null) {
urlList.add(resource.getModuleUrl());
}

for (String url : urlList) {
if(!requestMap.containsKey(url)){
requestMap.put(url, authorityCode);
}
}
}


List<TabMoaModule> resources = resourceDao.getResources();
for (TabMoaModule resource : resources) {
String authorityCode = resource.getPerm_code();
List<String> urlList = new ArrayList<String>();

// 讀取資源裏面的url
if (resource.getModuleUrl() != null) {
urlList.add(resource.getModuleUrl());
}

for (String url : urlList) {
if(!requestMap.containsKey(url)){
requestMap.put(url, authorityCode);
}
}
}


第五步
在spring配置文件中配置sec:authentication-provider節點,用自己的類實現spring的驗證接口,要在此類中加載登陸用戶的權限。
文件路徑:
ezg2.7\src\conf\applicationContext-security.xml
ezg2.7\src\com\srt\sdp\security\bean\UserDetailsService.java
Xml代碼
<bean id="userDetailsService" class="com.srt.sdp.security.bean.UserDetailsService"/>

<bean id="userDetailsService" class="com.srt.sdp.security.bean.UserDetailsService"/>
Java代碼




第四步
在調用了spring接口之後,將請求轉交給原有的登錄action處理

第五步
對安全框架進行改造,繼承spring的權限攔截器AbstractSecurityInterceptor,初始化ObjectDefinitionSource對象,爲安全驗證提供權限資源。並將此攔截器加入安全框架攔截器鏈中。

第六步
自定義決策者,根據用戶權限進行邏輯判斷,決定用戶是否能訪問相應資源。這部分的資料可以參考http://www.360doc.com/content/10/0903/18/2560742_50955108.shtml
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章