<p>개인적인 오픈소스 프로젝트 개발을 진행하면서 경험한 내용과 느낌을 간단하게 정리해보기로 했습니다. 현재 github<a class="tx-link" target="_blank" href="">(https://github.com/Pyohwan/JakduK</a>)에 소스 코드가 올라가 있습니다. 또한 K리그 작두왕(<a class="tx-link" target="_blank" href="https://jakduk.com">https://jakduk.com</a>)이 이 소스 코드로 돌아가는 것입니다.<br></p> <p><br></p> <p>첫번째 시간으로는 Spring Security에 Spring Social을 연동하는 방법에 대해 알아보겠습니다. 다음에 또 시간이 나면 다른 주제를 올리도록 할께요.</p> <p><br></p> <p>Spring Framework의 공식 문서는 아주 잘 구성되어 있기 때문에, Spring Security와 Spring Social에 대한 정보를 쉽게 살펴볼수 있습니다. (물론 영어) 여기서는 별달리 설명은 안하겠습니다.<br></p> <p><br></p> <p>먼저 사용하는 언어와 버전을 살펴보겠습니다.</p> <ul style="list-style-type:disc;"><li>Java 8</li> <li>Spring Framework 4.2.5.RELEASE</li> <li>Spring Social 1.1.4.RELEASE</li> <li>mongodb</li></ul><p><br></p> <p>그렇다면 어떤 SNS을 통해 인증을 시도 해볼까요? 해외용과 국내용으로 하나씩 정했습니다. 바로 Facebook과 Daum. 그럼 이제 Provider 라이브러리를 찾아야 하는데요.<br></p> <p><br></p> <p>Facebook Provider은 글로벌 서비스 답게, Spring Social의 메인 프로젝트로 등록 되어 있습니다. (<a target="_blank" href="http://projects.spring.io/spring-social-facebook/" target="_blank">http://projects.spring.io/spring-social-facebook/</a>)</p> <p>하 지만 Daum은 없어요. Spring Social 홈페이지의 하단에 Community Projects에 Spring Socail Daum이 있긴한데, 이건 2013년도에 어느분이 만들어 둔것으로 현재 사용할 수 없습니다. 왜냐하면 이 소스는 OAuth 1을 사용하는데 현재 Daum은 OAuth 1을 더이상 지원하지 않고, OAuth 2만 사용하기 때문입니다.</p> <p><br></p> <p>Kakao에서 공식적으로 Spring Social을 대응하고 있진 않으나 다행히 github에서 찾을 수 있었습니다.</p> <p><a class="tx-link" target="_blank" href="https://github.com/Hongchae/spring-social-daum">https://github.com/Hongchae/spring-social-daum</a></p> <p><br></p> <p>마 지막으로 mongodb용 UsersConnectionRepository를 구해야 합니다. Spring Social에서는 SNS계정으로 인증시 DB에 SNS 계정의 정보를 쓰고 읽는 UsersConnectionRepository를 제공합니다. RDB의 경우에는 Spring Social에서 친절하게 JdbcUsersConnectionRepository 라는 구현체를 제공해서 그냥 갖다 쓰면 됩니다. 하지만 mongodb도 Daum과 마찬가지로 Spring Social에 별달리 대응을 안해줍니다.</p> <p><br></p> <p>다행히 github에서 찾긴 했으나 막상 가져다 쓰니 에러가 있고, K리그 작두왕에 바로 적용하기엔 어려워 보여서 fork를 하고 소스코드를 조금 손을 봤습니다. <br></p> <p><a class="tx-link" target="_blank" href="https://github.com/Pyohwan/spring-social-mongodb">https://github.com/Pyohwan/spring-social-mongodb</a></p> <p><br></p> <p>자 준비는 여기까지 하고 소스코드를 빨리 봅시다.</p> <p><br></p> <p><b>1. 프로젝트에 spring-social-daum과 spring-social-mongodb jar 추가하기</b></p> <p>서두에 밝혔듯이 spring-social-daum과 spring-social-mongodb는 github에서 구했기 때문에 maven 원격 저장소에 있지 않습니다. 따라서 수동으로 프로젝트 폴더에 추가해 줍니다.</p> <p><img width="419" style="height:auto;" src="http://cfile8.uf.tistory.com/image/235FDD34572DEA9208A7B0" alt=""></p> <p style="text-align:center;clear:none;float:none;"><span class="imageblock" style="display:inline-block;width:419px;height:auto;max-width:100%;"><img width="419" alt="" src="" style="height:auto;"></span></p> <p>custom-lib라는 폴더에 담아뒀습니다.</p> <p><br></p> <p><b>2. Maven dependncy 추가</b></p> <p>Spring Security는 이미 설정이 되어 있다고 보기 때문에 Spring Social만 추가하겠습니다.</p> <p><br></p> <div style="border-style:dashed;border-width:1px;border-color:#c1c1c1;background-color:#eeeeee;padding:10px;" class="txc-textbox"> <p><br></p><pre style="background-color:#ffffff;color:#000000;font-family:'DejaVu Sans Mono';font-size:9.1pt;"><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">dependency</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">groupId</span><span style="background-color:#efefef;">></span>org.springframework.social<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">groupId</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">artifactId</span><span style="background-color:#efefef;">></span>spring-social-facebook<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">artifactId</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">version</span><span style="background-color:#efefef;">></span>${spring.social.facebook.version}<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">version</span><span style="background-color:#efefef;">></span><br><span style="width:1px;height:1px;float:right;"></span><span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">dependency</span><span style="background-color:#efefef;">></span><br><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">dependency</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">groupId</span><span style="background-color:#efefef;">></span>org.springframework.social<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">groupId</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">artifactId</span><span style="background-color:#efefef;">></span>spring-social-security<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">artifactId</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">version</span><span style="background-color:#efefef;">></span>1.1.4.RELEASE<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">version</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">dependency</span><span style="background-color:#efefef;">><br><br></span><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">dependency</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">groupId</span><span style="background-color:#efefef;">></span>org.springframework.social<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">groupId</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">artifactId</span><span style="background-color:#efefef;">></span>spring-social-daum<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">artifactId</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">version</span><span style="background-color:#efefef;">></span>0.1.1<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">version</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">scope</span><span style="background-color:#efefef;">></span>system<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">scope</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">systemPath</span><span style="background-color:#efefef;">></span>${project.basedir}/custom-lib/spring-social-daum-0.1.1.jar<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">systemPath</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">dependency</span><span style="background-color:#efefef;">></span><br><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">dependency</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">groupId</span><span style="background-color:#efefef;">></span>net.exacode.spring.social<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">groupId</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">artifactId</span><span style="background-color:#efefef;">></span>spring-social-mongodb<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">artifactId</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">version</span><span style="background-color:#efefef;">></span>1.0.1-SNAPSHOT<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">version</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">scope</span><span style="background-color:#efefef;">></span>system<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">scope</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">systemPath</span><span style="background-color:#efefef;">></span>${project.basedir}/custom-lib/spring-social-mongodb-1.0.1-SNAPSHOT.jar<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">systemPath</span><span style="background-color:#efefef;">></span><br><span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">dependency</span><span style="background-color:#efefef;">></span><br></pre></div> <p><br></p> <p>spring-social-facebook의 버전은 2.0.3.RELEASE입니다. spring-social-facebook dependncy를 추가하면 spring-social-core가 자동으로 딸려옵니다. spring-social-security는 Spring Security 설정에 Spring Social을 연동하기 위함입니다. spring-social-daum과 spring-social-mongodb는 프로젝트 폴더 경로를 넣어줍니다.</p> <p><br></p> <p><b>3. OAuth 접속 정보</b></p> <p>properties 파일에 Facebook과 Daum의 OAuth 접속 정보를 기입합니다.</p> <div style="border-style:solid;border-width:1px;border-color:#cbcbcb;background-color:#ffffff;padding:10px;" class="txc-textbox"><pre style="background-color:#ffffff;color:#000000;font-family:'DejaVu Sans Mono';font-size:9.1pt;"><span style="color:#808080;font-style:italic;"># facebook<br></span><span style="color:#000080;font-weight:bold;">facebook.app.id</span>=xxx<span style="color:#008000;font-weight:bold;"><br></span><span style="color:#000080;font-weight:bold;">facebook.app.secret</span>=xxx<span style="color:#008000;font-weight:bold;"><br></span><span style="color:#008000;font-weight:bold;"><br></span><span style="color:#808080;font-style:italic;"># daum<br></span><span style="color:#000080;font-weight:bold;">daum.client.id</span>=xxx<span style="color:#008000;font-weight:bold;"><br></span><span style="color:#000080;font-weight:bold;">daum.client.secret</span>=xxx</pre> <p><br></p></div> <p><br></p> <p>보안상 xxx로 가렸습니다.<br></p> <p><br></p> <p><b>4. SocialConfigurer 구현체</b></p> <p>Spring Social의 연결 정보 등을 정의 합니다.</p> <div style="border-style:solid;border-width:1px;border-color:#cbcbcb;background-color:#ffffff;padding:10px;" class="txc-textbox"><pre style="background-color:#ffffff;color:#000000;font-family:'DejaVu Sans Mono';font-size:9.1pt;"><span style="color:#808000;">@Configuration<br></span><span style="color:#808000;">@EnableSocial<br></span><span style="color:#000080;font-weight:bold;">public class </span>SocialConfig <span style="color:#000080;font-weight:bold;">implements </span>SocialConfigurer {<br><br><span style="color:#808000;">@Autowired<br></span><span style="color:#808000;"> </span><span style="color:#000080;font-weight:bold;">private </span>MongoTemplate <span style="color:#660e7a;font-weight:bold;">mongoTemplate</span>;<br><br><span style="color:#808000;">@Override<br></span><span style="color:#808000;"> </span><span style="color:#000080;font-weight:bold;">public void </span>addConnectionFactories(ConnectionFactoryConfigurer connectionFactoryConfigurer, Environment environment) {<br> connectionFactoryConfigurer.addConnectionFactory(<br><span style="color:#000080;font-weight:bold;">new </span>FacebookConnectionFactory(environment.getProperty(<span style="color:#008000;font-weight:bold;">"facebook.app.id"</span>)<br>, environment.getProperty(<span style="color:#008000;font-weight:bold;">"facebook.app.secret"</span>)));<br> connectionFactoryConfigurer.addConnectionFactory(<br><span style="color:#000080;font-weight:bold;">new </span>DaumConnectionFactory(environment.getProperty(<span style="color:#008000;font-weight:bold;">"daum.client.id"</span>)<br>, environment.getProperty(<span style="color:#008000;font-weight:bold;">"daum.client.secret"</span>)));<br> }<br><br><span style="color:#808000;">@Override<br></span><span style="color:#808000;"> </span><span style="color:#000080;font-weight:bold;">public </span>UserIdSource getUserIdSource() {<br><span style="color:#000080;font-weight:bold;">return new </span>AuthenticationNameUserIdSource();<br> }<br><br><span style="color:#808000;">@Override<br></span><span style="color:#808000;"> </span><span style="color:#000080;font-weight:bold;">public </span>UsersConnectionRepository getUsersConnectionRepository(<br>ConnectionFactoryLocator connectionFactoryLocator) {<br><br> MongoConnectionDao mongoConnectionDao = <span style="color:#000080;font-weight:bold;">new </span>MongoConnectionDao(<span style="color:#660e7a;font-weight:bold;">mongoTemplate</span>, <br>mongoConnectionConverter(connectionFactoryLocator));<br><br><span style="color:#000080;font-weight:bold;">return new </span>GenericUsersConnectionRepository(mongoConnectionDao, connectionFactoryLocator);<br> }<br><br>...<br></pre></div> <p>addConnectionFactories 메소드에서 Facebook과 Daum에 해당하는 ConnectionFactory를 생성해 줍니다.</p> <p>getUsersConnectionRepository 메소드에서 mongodb 용 UsersConnectionRepository를 생성합니다.</p> <p><br></p> <p><b>5. Spring Securty 설정에 Spring Social 추가</b></p> <div style="border-style:solid;border-width:1px;border-color:#cbcbcb;background-color:#ffffff;padding:10px;" class="txc-textbox"> <p><br></p><pre style="background-color:#ffffff;color:#000000;font-family:'DejaVu Sans Mono';font-size:9.1pt;"><span style="color:#808000;">@Configuration<br></span><span style="color:#808000;">@EnableWebSecurity<br></span><span style="color:#000080;font-weight:bold;">public class </span>SecurityConfig <span style="color:#000080;font-weight:bold;">extends </span>WebSecurityConfigurerAdapter {<br><br><span style="color:#808000;">@Override<br></span><span style="color:#808000;"> </span><span style="color:#000080;font-weight:bold;">public void </span>configure(WebSecurity web) <span style="color:#000080;font-weight:bold;">throws </span>Exception {<br> web.ignoring().antMatchers(<span style="color:#008000;font-weight:bold;">"/resources/**"</span>);<br> }<br><br><span style="color:#808000;">@Override<br></span><span style="color:#808000;"> </span><span style="color:#000080;font-weight:bold;">protected void </span>configure(HttpSecurity http) <span style="color:#000080;font-weight:bold;">throws </span>Exception {<br><br> http<br> .csrf().disable() <span style="color:#808080;font-style:italic;">// CSRF </span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';">방어 비활성화<br></span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';"> </span><span style="color:#808080;font-style:italic;">//Configures form login<br></span><span style="color:#808080;font-style:italic;"> </span>.formLogin()<br> .loginPage(<span style="color:#008000;font-weight:bold;">"/login"</span>)<br> .usernameParameter(<span style="color:#008000;font-weight:bold;">"j_username"</span>)<br> .passwordParameter(<span style="color:#008000;font-weight:bold;">"j_password"</span>)<br> .successHandler(jakdukSuccessHandler())<br> .failureHandler(jakdukFailureHandler())<br><span style="color:#808080;font-style:italic;">//Configures the logout function<br></span><span style="color:#808080;font-style:italic;"> </span>.and()<br> .logout()<br> .logoutRequestMatcher(<span style="color:#000080;font-weight:bold;">new </span>AntPathRequestMatcher(<span style="color:#008000;font-weight:bold;">"/logout"</span>))<br> .invalidateHttpSession(<span style="color:#000080;font-weight:bold;">true</span>)<br> .deleteCookies(<span style="color:#008000;font-weight:bold;">"JSESSIONID"</span>)<br> .logoutSuccessUrl(<span style="color:#008000;font-weight:bold;">"/logout/success"</span>)<br> .and()<br> .exceptionHandling().accessDeniedPage(<span style="color:#008000;font-weight:bold;">"/error/denied"</span>)<br><span style="color:#808080;font-style:italic;">//Configures url based authorization<br></span><span style="color:#808080;font-style:italic;"> </span>.and()<br> .authorizeRequests()<br> .antMatchers(<br><span style="color:#008000;font-weight:bold;">"/check/**"</span>,<br><span style="color:#008000;font-weight:bold;">"/logout"</span>,<br><span style="color:#008000;font-weight:bold;">"/home/**"</span>,<br><span style="color:#008000;font-weight:bold;">"/about/**"</span>,<br><span style="color:#008000;font-weight:bold;">"/auth/**"<br></span><span style="color:#008000;font-weight:bold;"> </span>).permitAll()<br> .antMatchers(<br><span style="color:#008000;font-weight:bold;">"/login"</span>, <span style="color:#808080;font-style:italic;">// </span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';">로그인<br></span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';"> </span><span style="color:#008000;font-weight:bold;">"/auth/*"</span>, <span style="color:#808080;font-style:italic;">// SNS </span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';">인증<br></span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';"> </span><span style="color:#008000;font-weight:bold;">"/signup"</span>, <span style="color:#808080;font-style:italic;">// SNS </span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';">계정으로 회원 가입<br></span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';"> </span><span style="color:#008000;font-weight:bold;">"/user/social"</span>, <span style="color:#808080;font-style:italic;">// OAUTH2 </span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';">콜백<br></span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';"> </span><span style="color:#008000;font-weight:bold;">"/user/write"</span>, <span style="color:#808080;font-style:italic;">// JakduK </span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';">회원 가입<br></span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';"> </span><span style="color:#008000;font-weight:bold;">"/user/*/write"</span>, <span style="color:#808080;font-style:italic;">// SNS </span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';">계정으로 회원 가입<br></span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';"> </span><span style="color:#008000;font-weight:bold;">"/password/*" </span><span style="color:#808080;font-style:italic;">// </span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';">비밀번호 찾기<br></span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';"> </span>).anonymous()<br> .antMatchers(<br><span style="color:#008000;font-weight:bold;">"/user/**"<br></span><span style="color:#008000;font-weight:bold;"> </span>).authenticated()<br> .antMatchers(<br><span style="color:#008000;font-weight:bold;">"/board/*/write"</span>,<br><span style="color:#008000;font-weight:bold;">"/board/*/edit"</span>,<br><span style="color:#008000;font-weight:bold;">"/jakdu/write"<br></span><span style="color:#008000;font-weight:bold;"> </span>).hasAnyRole(<span style="color:#008000;font-weight:bold;">"USER_01"</span>, <span style="color:#008000;font-weight:bold;">"USER_02"</span>, <span style="color:#008000;font-weight:bold;">"USER_03"</span>)<br> .antMatchers(<span style="color:#008000;font-weight:bold;">"/admin/**"</span>).hasRole(<span style="color:#008000;font-weight:bold;">"ROOT"</span>)<br> .anyRequest().permitAll()<br> .and()<br> .rememberMe()<br> .key(<span style="color:#008000;font-weight:bold;">"jakduk_cookie_key_auto_login"</span>)<br> .and()<br> .apply(getSpringSocialConfigurer())<br> .and()<br> .sessionManagement()<br> .maximumSessions(<span style="color:#0000ff;">3</span>).expiredUrl(<span style="color:#008000;font-weight:bold;">"/error/maxSession"</span>);<br> }</pre></div> <p>configure 메소드 내용이 좀 긴데, 거의다 Spring Security 정책 설정이고 마지막 즈음에 있는 .apply(getSpringSocialConfigurer())가 Spring Social을 활성화 해주는 코드입니다. <br></p> <p><br></p> <div style="border-style:solid;border-width:1px;border-color:#cbcbcb;background-color:#ffffff;padding:10px;" class="txc-textbox"><pre style="background-color:#ffffff;color:#000000;font-family:'DejaVu Sans Mono';font-size:9.1pt;"><span style="color:#808080;font-style:italic;">// </span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';">로그인 성공 후 특정</span><span style="color:#808080;font-style:italic;"> URL</span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';">일 경우</span><span style="color:#808080;font-style:italic;"> REDIRECT </span><span style="color:#808080;font-style:italic;font-family:'나눔고딕';">안 시키는 로직을 추가 해야 한다</span><span style="color:#808080;font-style:italic;">.<br></span><span style="color:#000080;font-weight:bold;">private </span>SpringSocialConfigurer getSpringSocialConfigurer() {<br> SpringSocialConfigurer configurer = <span style="color:#000080;font-weight:bold;">new </span>SpringSocialConfigurer();<br><span style="color:#000080;font-weight:bold;">return </span>configurer;<br>}</pre> <p><br></p></div> <p>getSpringSocialConfigurer()은 현재 별것 없습니다. SpringSocialConfigurer의 소스 코드를 들어가보면 Spring Security의 필터중에 AbstractPreAuthenticatedProcessingFilter가 있는데, 이것 앞에 Social 인증 필터를 하나 더 추가한것입니다. 즉 필터체인 과정에서 Spring Social을 하나 더 추가한 셈이지요.</p><br>다음에 계속..
<p>
K리그 커뮤니티 하나 소개합니다.
<a href="http://jakduk.com">K리그 작두왕</a>
</p>
이 게시물을 추천한 분들의 목록입니다.
[1] 2016/05/07 22:43:00 58.233.***.57 자르반고등어
558361[2] 2016/05/08 01:14:23 14.138.***.60 슝슝3
284767[3] 2016/05/08 02:23:05 1.234.***.39 일단개그하다
23241[4] 2016/05/08 02:23:32 59.6.***.89 익명01011011
417443[5] 2016/05/08 08:00:21 219.249.***.44 뽀룹뽀룹
546772[6] 2016/05/08 15:18:27 183.101.***.80 꾸듯
357582[7] 2016/05/09 20:38:35 175.121.***.163 하라구
18178[8] 2016/05/11 09:31:16 112.220.***.180 죽음의일격
550560[9] 2016/05/11 10:28:01 211.179.***.142 타라123
339811[10] 2016/05/11 22:55:14 210.180.***.19 사닥호
425608
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.