사용자 로그인 및 권한 인증을 위한 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();
<%
}
...
이상은 내가 로그인 관련 문제를 해결하는 방법을 열거하였는데 코드가 좀 길어서 전부 열거하지 않았다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.