<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<!-- <http pattern="/login/login.action" security="none"/>
<!-- <http auto-config="true" access-denied-page="/noAuth.action">접근권한이 없는 유저가 들어오면 /noAuth.action 접속하라 -->
<!-- <intercept-url pattern="/admin/**" access="ROLE_ADMIN" />ADMIN만 접근 가능함 -->
<!-- <intercept-url pattern="/bbs/**" access="ROLE_USER" />USER만 접근 가능함 -->
<!-- <form-login login-page="/login/login.action" default-target-url="/"/> -->
<!-- </http> -->
<!-- 위의 설정을 어노테이션 설정으로 바꿈. @Secured("ROLE_ADMIN") 이런식으로-->
<context:component-scan base-package="com.sp"/>
<!-- <beans:bean id="authSuccess" class="com.sp.member.MyAuthSuccess"/>-->
<!-- 표현식 -->
<http auto-config="true" use-expressions="true" access-denied-page="/noAuth.action">
<!--access-denied-page="/noAuth.action" 접속권한이 필요한 페이지에 접속권한이 없는 유저가 접속할 경우 이동할 주소 -->
<!-- 모든사용자접근허용 -->
<!-- <intercept-url pattern="/index.jsp" access="permitAll" /> -->
<!-- <intercept-url pattern="/main/main.action" access="permitAll" /> -->
<!-- <intercept-url pattern="/login/login.action" access="permitAll" /> -->
<!-- <intercept-url pattern="/member/member.action" access="permitAll" /> -->
<!-- <intercept-url pattern="/data/**" access="permitAll" /> -->
<!-- <intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" /> -->
<!-- <intercept-url pattern="/**" access="hasRole('ROLE_USER')"/> -->
<form-login
login-page="/login/login.action"
default-target-url="/"
always-use-default-target="true"
authentication-failure-url="/login/login.action?error" />
<!--authentication-success-handler-ref="authSuccess" /> -->
<!-- always-use-default-target="true" : 로그인 성공후에 default-target-url에 설정한 곳으로 갈지 말지 설정 -->
<!-- authentication-failure-url="/login/login.action?error" : 로그인 실패하면 보내는 주소 -->
<!-- authentication-success-handler-ref : 로그인 성공후에 세션과 쿠키처리를 담당하게 될 클래스의 bean태그의 id를 명시함 -->
<!-- always-use-default-target과 authentication-success-handler-ref 같이 사용하지 못함. 사용하게 될 경우 authentication-success-handler-ref 만 적용됨 -->
<!-- authentication-success-handler-ref 해주었다면 로그인 성공 후 로그인하는 화면으로 되돌아간다. -->
<session-management>
<concurrency-control max-sessions="1" />
<!-- max-sessions="1" 세션을 한개만 허용(새로운 세션을 접속하게 하고 기존에 접속한 세션을 죽임),
<concurrency-control error-if-maximum-exceeded="true"/> 로그인을 하나의 브라우져만 가능케함
(크롬과 IE창을 같이 띄어놓고 먼저 크롬에서 접속한 상태에서 IE로 접속을 못함(새로운 세션 접속을 차단함, 단점은 로그아웃을 해도 세션이 안풀릴때가 있어서 로그인이 안될경우가 발생한다고 함, 되도록 이 설정은 하지말라네)-->
</session-management>
</http>
<!-- 로그인 할 때 사용자 정보와 권한을 확인하는 쿼리 - web상에서 로그인시 jdbc를 이용하여 데이터에 접근한 뒤 설정한 쿼리를 이용하여 로그인한 데이터를 요청한다 -->
<jdbc-user-service data-source-ref="dataSource" id="userService"
users-by-username-query="SELECT userId AS userName, userPwd AS password,enabled FROM members WHERE userId=?"
authorities-by-username-query="SELECT userId AS userName, authority FROM authorities WHERE userId=?"/>
<!-- 로그인 시 암호화 해독을 거처서 비밀번호를 체크할 수 있게 설정해줌 -->
<authentication-manager>
<authentication-provider user-service-ref="userService">
<password-encoder hash="sha-256"/><!-- hash="sha-256" 암호화 해독 방식을 설정 -->
</authentication-provider>
</authentication-manager>
</beans:beans>
======================================================
== 참고
authentication-success-handler-ref="authSuccess" form-login태그안에 이와 같이 선언되어있다면
<beans:bean id="authSuccess" class="com.sp.member.MyAuthSuccess"/> 이와 같은 빈태그가 선언되어 클래스가 필요할 것이며
해당 클래스가 SavedRequestAwareAuthenticationSuccessHandler 을 상속받은 클래스라면 아래와 같이 설정해 주면된다. 그러면
super.onAuthenticationSuccess(req, resp, auth); 메서드로 인해서 로그인 할때 화면으로 다시 돌아갈 것이다.
아래의 자바소스코드를 참고하시라..
로그인 화면으로 돌아가길 원치않는다면 이런 설정은 필요없고
form-login 태그안에
default-target-url="/"
always-use-default-target="true"
이 두개의 선언만 신경써주면된다.
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import com.bhb.bbs.member.Member;
import com.bhb.bbs.member.MemberSerivce;
public class AuthSeccess extends SavedRequestAwareAuthenticationSuccessHandler {
@Autowired
private MemberSerivce memberService;
public void onAuthenticationSuccess(HttpServletRequest req, HttpServletResponse resp, Authentication auth)throws ServletException, IOException{
HttpSession session = req.getSession();
session.setMaxInactiveInterval(60*60*24);
String id = auth.getName();
Map<String, Object> map = new HashMap<>();
map.put("id",id);
Member member=memberService.readMember(id);
session.setAttribute("member", member);
super.onAuthenticationSuccess(req, resp, auth);
}
}
'웹개발 셋팅' 카테고리의 다른 글
maybatis-config & mapper 설정 (0) | 2014.01.22 |
---|---|
dispatcher-servlet.xml (0) | 2013.11.27 |
root-context.xml (applicationContext.xml) (0) | 2013.11.27 |
web.xml (0) | 2013.11.27 |
VPN이란 (0) | 2013.11.27 |