본문 바로가기

웹개발 셋팅

security-context.xml

<?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