content: /*
   * Copyright 1999-2012 Alibaba Group.
   *  
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *  
   *      http://www.apache.org/licenses/LICENSE-2.0
   *  
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package com.alibaba.cobar.manager.web.action;
  
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import org.springframework.beans.factory.InitializingBean;
  import org.springframework.validation.BindException;
  import org.springframework.web.servlet.ModelAndView;
  import org.springframework.web.servlet.mvc.SimpleFormController;
  
  import com.alibaba.cobar.manager.dataobject.xml.UserDO;
  import com.alibaba.cobar.manager.service.XmlAccesser;
  import com.alibaba.cobar.manager.web.URLBroker;
  
  /**
   * (created at 2010-7-20)
   * 
   * @author <a href="mailto:shuo.qius@alibaba-inc.com">QIU Shuo</a>
   * @author wenfeng.cenwf 2011-4-7
   */
  public class LoginAction extends SimpleFormController implements InitializingBean {
  
      private XmlAccesser xmlAccesser;
  
      public void setXmlAccesser(XmlAccesser xmlAccesser) {
          this.xmlAccesser = xmlAccesser;
      }
  
      @SuppressWarnings("unused")
      private static class Account {
  
          private String userName;
          private String password;
  
          public String getUserName() {
              return userName;
          }
  
          public void setUserName(String userName) {
              this.userName = userName;
          }
  
          public String getPassword() {
              return password;
          }
  
          public void setPassword(String password) {
              this.password = password;
          }
  
      }
  
      @Override
      public void afterPropertiesSet() throws Exception {
          setCommandClass(Account.class);
          if (xmlAccesser == null) {
              throw new IllegalArgumentException("property 'xmlAccesser' is null!");
          }
      }
  
      @Override
      protected ModelAndView onSubmit(HttpServletRequest request,
                                      HttpServletResponse response,
                                      Object command,
                                      BindException errors) throws Exception {
  
          Account form = (Account) command;
          UserDO user = xmlAccesser.getUserDAO().validateUser(form.getUserName().trim(), form.getPassword().trim());
  
          if (user != null) {
              if (logger.isInfoEnabled()) {
                  StringBuilder sb = new StringBuilder("User '");
                  sb.append(user.getUsername());
                  sb.append("' login!");
                  logger.info(sb.toString());
              }
              request.getSession().setAttribute("user", user);
              //request.getSession().setMaxInactiveInterval(30);
              String to = (String) request.getSession().getAttribute("lastRequest");
              if (null != to) {
                  request.getSession().removeAttribute("click");
                  request.getSession().removeAttribute("lastRequest");
                  response.sendRedirect(to);
              } else {
                  response.sendRedirect(URLBroker.redirectClusterListScreen());
              }
          } else {
              // ??????
              boolean flag = (Boolean) request.getSession().getAttribute("click");
              if (flag) {
                  response.sendRedirect(URLBroker.redirectIndexPage("false"));
              } else {
                  response.sendRedirect(URLBroker.redirectLogInPage("false"));
              }
          }
  
          return null;
      }
  
  }
  