java學習

          java學習

           

          struts2實現登錄攔截器和驗證方法

          struts2中的攔截器的定義是先定義一個類實現Interceptor接口,重寫intercept方法。下面是實現登錄驗證的攔截器。

          <?xml version="1.0" encoding="UTF-8"?>

          <!DOCTYPE struts PUBLIC

             "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"

             "http://struts.apache.org/dtds/struts-2.1.7.dtd">

          <struts> 

             <package name="mystruts" extends="struts-default">  

               <interceptors>   

                  <interceptor name="LoginInterceptors" class="com.kaishengit.interceptors.LoginInterceptors">

                    <param name="excludeName">execute,login,index</param>

                    <param name="sessionName">currUser</param>

                  </interceptor>     

                  <interceptor-stack name="myInterceptors">           

                    <interceptor-ref name="LoginInterceptors"></interceptor-ref>                      

                  <interceptor-ref name="defaultStack"></interceptor-ref>

                  </interceptor-stack>      

               </interceptors>

                  <default-interceptor-ref name="myInterceptors"></default-interceptor-ref>

               <!-- 適用于所有的action -->

               <global-results>

                    <result name="login" type="redirect">index.jsp</result>

               </global-results>

            

               <!-- AppAction -->

               <action name="index" class="com..web.AppAction">

                  <result>/WEB-INF/views/index.jsp</result>

                 

               </action>

               <action name="login" class="com.web.AppAction" method="login">

              

                  <result type="redirectAction">main</result>

                  <result name="input" type="">/WEB-INF/views/index.jsp</result>

               </action>

             </package>

          </struts>

          public class LoginInterceptors extends AbstractInterceptor{

           

            

             private static final long serialVersionUID = 1L;

             private String sessionName;

             private String excludeName;

             private List<String>  list;

             public List<String>  strlsit(String str){

               String[]  s = str.split(",");

               List<String>  list = new  ArrayList<String>();

               for(String ss : s){

                  list.add(ss.trim());

               }

               return list;

             }

             @Override

             public void init() {

                list = strlsit(excludeName);

             }

             @Override

             public String intercept(ActionInvocation invocation) throws Exception {

               String actionName = invocation.getProxy().getActionName();

               if(list.contains(actionName)){

                  //請求的是合法

                  return invocation.invoke();

               }else {

                  //查看session

                  Map<String,Object>  session = invocation.getInvocationContext().getSession();

                  User user = (User) session.get(sessionName);

                  if(user==null){

                    return "login";

                  }else {

                    return invocation.invoke();

                  }

               }

             }

             public String getSessionName() {

               return sessionName;

             }

             public void setSessionName(String sessionName) {

               this.sessionName = sessionName;

             }

             public String getExcludeName() {

               return excludeName;

             }

             public void setExcludeName(String excludeName) {

               this.excludeName = excludeName;

             }

             public List<String> getList() {

               return list;

             }

             public void setList(List<String> list) {

               this.list = list;

             }

          }

          當調用除了execute,login,index三個方法時,先驗證是否登錄,如果沒有登錄,調回登陸頁。

          Action實現驗證參數值,先讓action繼承ActionSupport,

          因為ActionSupport實現了Validateable接口,再

          重寫。validateable方法。Validateable方法是空方法,當login方法調用前驗證是否空值,定義方法validateLogin()

          以后和業務有關的驗證方法定義都是validatexxx(),xxx是執行的業務方法。

          public class AppAction extends ActionSupport implements SessionAware,ServletRequestAware {

             private static final long serialVersionUID = 1L;

             private Map<String,Object> session;

             private HttpServletRequest request;

             private User user;

             private UserService userService = new UserService();

            

            

            

             /**

              * 去登錄頁面

              * @return

              */

             public String execute() {

               return "success";

             }

            

             /**

              * 登錄

              * @return

              */

             public String login() {

               if(user==null){

                  return "login";

               }else {

           

                  User loginUser = userService.login(user);

                  if(loginUser == null) {

                    return "login";

                  } else {

                    //Map<String,Object> session = ActionContext.getContext().getSession();

                    session.put("currUser", loginUser);

                   

                    // = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);

                    //HttpServletResponse response = (HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);

                   

                    return "success";

                  }

              

               }

             }

           

           

             public void setSession(Map<String, Object> session) {

               this.session = session;

             }

             public void setServletRequest(HttpServletRequest request) {

               this.request = request;

             }

            

             //get set

           

             public User getUser() {

               return user;

             }

           

             public void setUser(User user) {

               this.user = user;

             }

           

             public void validateLogin() {

               if(user==null){

                  return;

               }

               System.out.println("================validateLogin==========");

               if("".equals(user.getUsername())||user.getUsername()==null){

                  addFieldError("userName", "名稱必填");

               }

               if("".equals(user.getPassword())||user.getPassword()==null){

                  addFieldError("password", "密碼不能空");

               }

             }

             public void validate() {

             System.out.println("=========================="); 

             } 

          }

          在頁面上寫<s:fielderror fieldName="userName" theme="simple"/>

          <s:fielderror fieldName="password" theme="simple"/>
          得到驗證信息

          posted on 2013-04-06 23:43 楊軍威 閱讀(4887) 評論(5)  編輯  收藏

          評論

          # re: struts2實現登錄攔截器和驗證方法 2014-10-31 18:31 admin

          謝謝  回復  更多評論   

          # re: struts2實現登錄攔截器和驗證方法 2014-10-31 18:34 userName

          歡迎光臨!  回復  更多評論   

          # re: struts2實現登錄攔截器和驗證方法 2014-12-02 22:15 山鬼謠

          給你點個贊,雖然界面的背景圖片,讓人看得相當不爽,但是這個攔截器是我想要的,網上其他的攔截器,都是攔截全部請求,而你雖然也是,但是可是“開后門”,進行有選擇性的攔截,謝謝!  回復  更多評論   

          # re: struts2實現登錄攔截器和驗證方法[未登錄] 2014-12-03 08:47 離歌

          說真的這個攔截器不錯,但是這個背景啊。。。我看的眼睛酸疼  回復  更多評論   

          # re: struts2實現登錄攔截器和驗證方法 2016-02-22 22:53 嗯嗯

          嗯嗯  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 方城县| 密山市| 临沭县| 普安县| 长白| 左权县| 郧西县| 咸宁市| 南召县| 保德县| 神木县| 增城市| 昔阳县| 嘉禾县| 金溪县| 巍山| 随州市| 祁门县| 康定县| 崇明县| 株洲县| 乌鲁木齐市| 五家渠市| 辉南县| 巫山县| 宕昌县| 买车| 佛教| 张北县| 崇阳县| 济阳县| 新野县| 寻乌县| 全椒县| 凤城市| 陈巴尔虎旗| 抚宁县| 博湖县| 南召县| 张家港市| 方山县|