사용자 로그인 및 권한 인증을 위한 Spring3 사용 설명

8232 단어 spring권한 인증
Spring3를 사용하여 사용자 로그인 및 권한 인증
여기서 내가 간단하게 소개할게, 내가 실현할 때 처리하는 몇 가지 주요한 실현들.
1. 사용자 로그인

 <form action="loginAction.do" method="post"> 
  <div class="header"> 
  <h2 class="logo png"></h2> 
  </div> 
  <ul> 
        <li><label> </label><input name="username" type="text" class="text"/></li> 
        <li/> 
        <li><label>   </label><input name="password" type="password" class="text" /></li>  
        <li/> 
        <li class="submits"> 
          <input class="submit" type="submit" value=" " /> 
        </li> 
  </ul> 
  <div class="copyright">© 2013 - 2014 |</div> 
</form> 
이상은 프론트 데스크톱 페이지이고 백그라운드는 간단한 논리적 실현이다.

    @RequestMapping(value="loginAction.do", method=RequestMethod.POST) 
public ModelAndView loginAction(@RequestParam(value="username") String username, @RequestParam(value="password") String password, HttpSession session, HttpServletResponse resp, @RequestParam(value="savetime", required=false) String savetime) { 
  session.removeAttribute(LogConstant.LOGIN_MESSAGE); 
  SystemUserDataBean user = userDao.getSystemUserByUserName(username); 
  ModelAndView view = null; 
  if(user == null) { 
    view = new ModelAndView(new RedirectView("login.html")); 
    session.setAttribute(LogConstant.LOGIN_MESSAGE, " "); 
    return view; 
  } 
  boolean isPasswordCorrect = EncryptionUtil.compareSHA(password, user.getPassword()); 
  if(isPasswordCorrect){ 
    session.setAttribute(LogConstant.CURRENT_USER, username); 
     
  } else{ 
    view = new ModelAndView(new RedirectView("login.html")); 
    session.setAttribute(LogConstant.LOGIN_MESSAGE, " "); 
  } 
     
  return view; 
} 
2. 로그인 정보
로그인 페이지에는 암호 오류 등의 정보가 표시되는 JavaScript가 있습니다.

<script type="text/javascript"> 
var login_username_info = '<%=request.getSession().getAttribute("currentUser") == null ? "" : request.getSession().getAttribute("currentUser")%>'; 
var login_message_info = '<%=request.getSession().getAttribute("login_message") == null ? "" : request.getSession().getAttribute("login_message")%>'; 
if(login_message_info != null && login_message_info != ''){ 
  alert(login_message_info); 
} 
 
</script> 

3. 로그인하지 않은 사용자의 요청을 차단
여기에서 페이지와 백그라운드에서 이중 차단을 실현했다.
페이지 코드는 다음과 같습니다.

<% 
if(session.getAttribute("currentUser")==null){ 
%> 
window.parent.location='login.html'; 
<% 
} 
%> 
백그라운드는 차단기(servlet-config.xml)입니다.

<!--   -->  
  <mvc:interceptors>  
    <mvc:interceptor>  
      <mvc:mapping path="/*.do" />  
      <bean class="com..log.report.interceptor.AccessStatisticsIntceptor" />  
    </mvc:interceptor>  
  </mvc:interceptors>  

차단기의 실현은

import org.springframework.web.servlet.HandlerInterceptor; 
import org.springframework.web.servlet.ModelAndView; 
 
 
public class AccessStatisticsIntceptor implements HandlerInterceptor { 
@Override 
  public void afterCompletion(HttpServletRequest arg0, 
      HttpServletResponse arg1, Object arg2, Exception arg3) 
      throws Exception { 
    // TODO Auto-generated method stub 
 
  } 
 
  @Override 
  public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, 
      Object arg2, ModelAndView arg3) throws Exception { 
    // TODO Auto-generated method stub 
 
  } 
 
  @Override 
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 
      Object obj) throws Exception { 
       
    String uri = request.getRequestURI().substring(request.getRequestURI().lastIndexOf("/") +1); 
    if(!AuthorityController.isAuthorized(uri, request.getSession())) { 
      //  
      return false; 
//     throw new CustomException(LogConstant.USER_NOT_LOGIN); 
    } 
      return true; 
 } 
구체적으로 어떻게 검증하는지는 사용자의 권한에 따라 소개하지 않을 것이다
4. 로그인하기 전에 액세스한 페이지로 돌아가기
먼저 페이지에 스크립트를 추가하고 jQuery를 사용하여 백그라운드에 접근합니다

    var page = ""; 
var loc = decodeURIComponent(window.parent.location); 
var start = loc.indexOf("Log/") + 8; 
var end = loc.indexOf(".html"); 
page = loc.substr(start, end-start); 
if(page != null && page != '') { 
  alert(page); 
  $.ajax({ 
    type : "get", 
    url : "setPreviousPageAction.do?previousPage=" + page + ".html", 
    success : function(msg){   
 
    } 
  }); 
} 
그리고 백그라운드에 이 페이지가 기록되어 있습니다.

@RequestMapping(value="setPreviousPageAction.do") 
public void setPreviousPageAction(@RequestParam(value="previousPage") String previousPage, HttpSession session){ 
  session.setAttribute(LogConstant.PREVIOUS_PAGE, previousPage); 
} 
로그인이 완료되면 이 페이지로 돌아가면 됩니다.
5. 사용자 이름 암호 저장
로그인 페이지에서는 드롭다운 상자를 저장할 수 있습니다.

<select class="save_login" id="savetime" name="savetime"> 
  <option selected value="0"> </option> 
  <option value="1"> </option> 
  <option value="2"> </option> 
  <option value="3"> </option> 
</select> 
로그인할 때 백그라운드에서 작업을 수행하여 정보를 쿠키에 저장합니다.

if(savetime != null) { // Cookie 
  int savetime_value = savetime != null ? Integer.valueOf(savetime) : 0; 
  int time = 0; 
  if(savetime_value == 1) { //  
    time = 60 * 60 * 24; 
  } else if(savetime_value == 2) { //  
    time = 60 * 60 * 24 * 30; 
  } else if(savetime_value == 2) { //  
    time = 60 * 60 * 24 * 365; 
  } 
  Cookie cid = new Cookie(LogConstant.LOG_USERNAME, username); 
  cid.setMaxAge(time); 
  Cookie cpwd = new Cookie(LogConstant.LOG_PASSWORD, password); 
  cpwd.setMaxAge(time); 
  resp.addCookie(cid); 
  resp.addCookie(cpwd); 
}  
프론트 데스크톱에서 사용자가 로그인하지 않은 것을 발견하면 쿠키의 데이터를 꺼내 로그인합니다.

if(session.getAttribute("currentUser")==null){ 
  Cookie[] cookies = request.getCookies(); 
  String username = null; 
  String password = null; 
  for(Cookie cookie : cookies) { 
    if(cookie.getName().equals("log_username")) { 
      username = cookie.getValue(); 
    } else if(cookie.getName().equals("log_password")) { 
      password = cookie.getValue(); 
    } 
  } 
  if(username != null && password != null) { 
    %> 
    $.ajax({ 
      type : "post", 
      url : "loginByCookieAction.do", 
      data:"username=" + "<%=username%>"+ "&password=" + "<%=password%>", 
      success : function(msg){   
        if(msg.status == 'success') 
          window.parent.location.reload(); 
        else if(msg.status == 'failed') 
          gotoLoginPage(); 
      } 
    }); 
    <% 
  } else { 
    %> 
    gotoLoginPage(); 
    <% 
  } 
   
  ... 

이상은 내가 로그인 관련 문제를 해결하는 방법을 열거하였는데 코드가 좀 길어서 전부 열거하지 않았다.

좋은 웹페이지 즐겨찾기