조커버그
377
2019-02-12 09:48:17 작성 2019-02-12 09:49:08 수정됨
7
175

스프링 시큐리티 멀티로그인에서 테이블 3개 참조 하는게 가능할까요??


스프링 시큐리티 다중 멀티 로그인 구현할 때 DB도 3개 테이블에서 각각 참조 할 수 있나요??

예제는 몇개 찾아봤는데 다 하나의 테이블에서 사용하는거고, 아직 3개 테이블을 참조하는 걸 찾진 못해서요/.

아래가 시큐리티의 xml인데 저는 user랑 company, admin 이렇게 3분류가 테이블이 각각 다르고 로그인창도 달라서 시큐리티를 3개 걸어야 하거든요. <security:authentication-manager> 를 3개 사용해서 로그인 페이지를 3개 쓰는게 가능할까요?? 끝까지 계속 구글링 해보고 싶지만 현재 시간이 너무 촉박해 이렇게 급하게 문의 드립니다 ㅠㅠ

</security:http>
<security:authentication-manager>
	<security:authentication-provider>
		<security:jdbc-user-service
			authorities-by-username-query="select m_email, 'user' from user where m_email=?"
			users-by-username-query="select m_email, m_pwd as password, 1 m_enabled from user where m_email=?"
			data-source-ref="driverManagerDataSource"
		/><!-- db연결 -->
		
		<security:password-encoder ref="bCryptPasswordEncoder" />
	</security:authentication-provider>
</security:authentication-manager>

0
0
  • 답변 7

  • 유리세계
    884
    2019-02-12 11:05:38

    권한 구분은 로그인하는 페이지에 따라 다른건가요?

    시큐리티를 3개로 늘리기보다는 쿼리로 3개가 다 돌아가게끔 해야할 것 같은데...

    권한마다 암호화 방식을 다르게 하실게 아니라면요

    0
  • 조커버그
    377
    2019-02-12 11:21:13

    @유리세계

    일반 유저, company, 관리자 이렇게 3개 로그인페이지 마다 로그인 후 권한은 다 다릅니다.

    그럼 로그인 processing url은 공통으로 가고 

    아래 부분에서 select m_email, '권한칼럼' from user join company join admin where m_email=? on...

    처럼 3개 테이블 조인걸고 successful intercepter handler 만들어서 유저가 로그인 후 받은 authentication 값에 따라 페이지 맵핑하면 될까요??

    <security:jdbc-user-service
    			authorities-by-username-query="select m_email, 'user' from user where m_email=?"
    			users-by-username-query="select m_email, m_pwd as password, 1 m_enabled from user where m_email=?"
    			data-source-ref="driverManagerDataSource"
    		/><!-- db연결 -->
    0
  • 유리세계
    884
    2019-02-12 11:25:53

    그렇겠죠 권한에 따라 이동할 페이지를 나누면 될것 같은걸요

    0
  • 조커버그
    377
    2019-02-12 12:44:22 작성 2019-02-12 12:44:39 수정됨

    @유리세계 

    그럼 궁금한게 users-by-username-query


    users-by-username-query="select m_email, m_pwd as password, 1 m_enabled from user where m_email=?"


    위 부분에서 조인을 걸수 있나요??  조인걸면 


    select u.m_email, u.m_pwd,d.d_email,d.d_pwd, ad.a_email,ad.a_pwd 1 m_enabled from user u, doctor d , admin ad where u.m_email=? or d.d_email=? or ad.a_email=?;

    이런식으로 걸릴텐데 시큐리티에서 읽을수 있을까요??



    0
  • 유리세계
    884
    2019-02-12 13:37:28

    쿼리에서 조인을 당연히 사용가능하죠

    그런데 쿼리를 그렇게 쓰시는건...

    u_email, d_email, a_email 일일이 확인하실건가요 ㄷㄷ

    0
  • 조커버그
    377
    2019-02-12 13:58:14 작성 2019-02-12 13:58:45 수정됨

    @유리세계

    쿼리를 못짜겠네요 ㅠㅠ 3개의 각 테이블 조인후  만약 email,자료가 있으면 select 이메일 as m_email, 패스워드 as m_pwd 이렇게 짜면 되는데, mybatis라면 if 동적쿼리 써서 짜면 되는데 sql문으로는 도저히 못짜겠네요 ㅠㅠ or or 이렇게 쿼리 들어가면 안될것 같아요 혹시 아이디어 있을까요??

    0
  • 유리세계
    884
    2019-02-12 14:24:24 작성 2019-02-12 14:25:09 수정됨

    이메일이 유니크하다는 가정하에 억지로해보면

    select total.email
    
    from
    
    (select a_email as email
    
    from a
    
    union all
    
    select u_email as email
    
    from b
    
    union all
    
    select d_email as email
    
    from c) total
    
    where total.email = ?

    별로 추천드리고 싶지는 않네요, 로그인 페이지가 다르다면 각각의 위치에서 오는 사람에 따라

    어디서 왔다는 기준으로 보는 테이블을 나누는걸 추천드리는데...

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.