需求:某些頁面需要登錄後方可顯示,因此需要驗證是否登錄,如果登錄成功后自動跳轉到原頁面,實現此功能的方法已有很多,對高手們就班門弄斧了,希望能給像我這樣的菜鳥們一些參考,起到拋磚引玉的作用;代碼並不完整,只列出了主要部分.
環境:Spring JSF Hibernate
實現方式:
1、定義業務核心服務Bean,完成主要的業務邏輯,在Spring中配置為Session類.
/*
類名:PublicService
功能:實現各種核心業務.
*/
public class PublicService {
private String strurl; //登錄后跳轉的url地址
....
public String checkLogin(String pre_url)
{
// 判斷用戶是否已經登錄,如果未登錄,那麼跳轉到登錄頁面
FacesContext facesContext = FacesContext.getCurrentInstance();
if (!Check_if_validateuser()) { //如果未登錄
try {
this.setStrurl(pre_url); //設置登錄后跳轉的url地址
facesContext.getExternalContext().redirect(
Adsysparameters.sys_url "enterprises/login.faces"); //登錄頁面
return "invalid";
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return "sessionok";
}
//登錄頁面
public String loginYGsys(String account, String password) {
FacesContext facesContext = FacesContext.getCurrentInstance();
//登錄系統,代碼略
//登錄成功后
try {
facesContext.getExternalContext().redirect(
this.getStrurl()); //Strurl在判斷是否登錄的函數checkLogin中已設置
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
return "error ";
…
}
}
spring的applicationContext.xml中,
<bean id="publicservice"
class="com.gisco.adsys.service.PublicService" scope="session"> //session級
.......
</bean>
2、定義一個Bean,此處命名為CheckloginBean,設置一些屬性,這些屬性在頁面請求時從此Bean中獲取屬性;如:
package com.gisco.adsys.view.bean;
import com.gisco.adsys.parameters.Adsysparameters;
import com.gisco.adsys.service.PublicService;
public class CheckloginBean {
private PublicService publicservice; //定義業務核心服務Bean
// 如下變數,僅做驗證用戶是否登錄只用
private String valid4producelist;
private String valid4newproduce;
public String getValid4newproduce() {
this.valid4newproduce=publicservice
.checkLogin(Adsysparameters.sys_url
"enterprises/extentprodadd.faces"); //需要驗證登錄的頁面
return valid4newproduce;
}
public void setValid4newproduce(String valid4newproduce) {
this.valid4newproduce = valid4newproduce;
}
public String getValid4producelist() {
this.valid4producelist=publicservice
.checkLogin(Adsysparameters.sys_url
"enterprises/extproducelist.faces");//需要驗證登錄的頁面
return valid4producelist;
}
public void setValid4producelist(String valid4producelist) {
this.valid4producelist = valid4producelist;
}
}
3、JSF中配置CheckloginBean
<managed-bean>
<managed-bean-name>checkloginBean</managed-bean-name>
<managed-bean-class>
com.gisco.adsys.view.bean.CheckloginBean
</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>publicservice</property-name>
<value>#{publicservice}</value>
</managed-property>
</managed-bean>
4、頁面中extentprodadd.jsp中,引用CheckloginBean 中定義的屬性valid4newproduce
<f:view>
<h:form id="newprodform">
<h:inputHidden value="#{checkloginBean.valid4newproduce}" id="valid4newproduce">
</h:inputHidden>
…
</h:form>
</f:view>
[火星人 ] 登錄成功后自動跳轉到原頁面的實現辦法已經有827次圍觀