로그인 작업중.

cks
강석 최 2023-11-23 11:44:02 +09:00
parent a0390e0b3a
commit 40318e86ef
3 changed files with 32 additions and 23 deletions

View File

@ -18,7 +18,7 @@ function EgovLoginContent(props) {
const location = useLocation(); const location = useLocation();
console.log("EgovLoginContent [location] : ", location); console.log("EgovLoginContent [location] : ", location);
const [userInfo, setUserInfo] = useState({ id: '', password: 'default', userSe: 'USR' }); const [userInfo, setUserInfo] = useState({ username: '', password: 'default', userSe: 'USR' });
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
const [loginVO, setLoginVO] = useState({}); const [loginVO, setLoginVO] = useState({});
@ -55,14 +55,14 @@ function EgovLoginContent(props) {
useEffect(() => { useEffect(() => {
let data = getLocalItem(KEY_ID); let data = getLocalItem(KEY_ID);
if (data !== null) { if (data !== null) {
setUserInfo({ id: data, password: 'default', userSe: 'USR' }); setUserInfo({ username: data, password: 'default', userSe: 'USR' });
} }
}, []); }, []);
const submitFormHandler = (e) => { const submitFormHandler = (e) => {
console.log("EgovLoginContent submitFormHandler()"); console.log("EgovLoginContent submitFormHandler()");
const loginUrl = "/auth/login-jwt" const loginUrl = "/auth/login"
const requestOptions = { const requestOptions = {
method: "POST", method: "POST",
headers: { headers: {
@ -111,8 +111,8 @@ function EgovLoginContent(props) {
<fieldset> <fieldset>
<legend>로그인</legend> <legend>로그인</legend>
<span className="group"> <span className="group">
<input type="text" name="" title="아이디" placeholder="아이디" value={userInfo?.id} <input type="text" name="" title="아이디" placeholder="아이디" value={userInfo?.username}
onChange={e => setUserInfo({ ...userInfo, id: e.target.value })} /> onChange={e => setUserInfo({ ...userInfo, username: e.target.value })} />
<input type="password" name="" title="비밀번호" placeholder="비밀번호" <input type="password" name="" title="비밀번호" placeholder="비밀번호"
onChange={e => setUserInfo({ ...userInfo, password: e.target.value })} /> onChange={e => setUserInfo({ ...userInfo, password: e.target.value })} />
</span> </span>

View File

@ -66,8 +66,8 @@ public class EgovLoginApiController extends BaseController {
@Operation( @Operation(
summary = "JWT 로그인", summary = "회원가입",
description = "JWT 로그인 처리", description = "회원가입",
tags = {"EgovLoginApiController"} tags = {"EgovLoginApiController"}
) )
@ApiResponses(value = { @ApiResponses(value = {

View File

@ -14,10 +14,12 @@ import org.springframework.security.config.annotation.web.configurers.AbstractHt
import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.DefaultRedirectStrategy; import org.springframework.security.web.DefaultRedirectStrategy;
import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.savedrequest.HttpSessionRequestCache; import org.springframework.security.web.savedrequest.HttpSessionRequestCache;
import org.springframework.security.web.savedrequest.SavedRequest; import org.springframework.security.web.savedrequest.SavedRequest;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
@ -100,22 +102,28 @@ public class SecurityConfig {
} }
@Bean @Bean
protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf(AbstractHttpConfigurer::disable)
return http.csrf(AbstractHttpConfigurer::disable) .authorizeHttpRequests(authorize -> authorize
.authorizeHttpRequests(authorize -> authorize .antMatchers(AUTH_WHITELIST).permitAll()
.antMatchers(AUTH_WHITELIST).permitAll() .antMatchers(HttpMethod.GET,AUTH_GET_WHITELIST).permitAll()
.antMatchers(HttpMethod.GET,AUTH_GET_WHITELIST).permitAll() .anyRequest().authenticated()
.anyRequest().authenticated() ).sessionManagement((sessionManagement) ->
).sessionManagement((sessionManagement) -> sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS) )
) .cors().and()
.cors().and() .addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class) .exceptionHandling(exceptionHandlingConfigurer ->
.exceptionHandling(exceptionHandlingConfigurer -> exceptionHandlingConfigurer
exceptionHandlingConfigurer .authenticationEntryPoint(new JwtAuthenticationEntryPoint())
.authenticationEntryPoint(new JwtAuthenticationEntryPoint()) )
) .cors().and()
.build(); .formLogin().loginProcessingUrl("/auth/login")
.successHandler(loginSuccessHandler())
.and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/")
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID");
return http.build();
} }
@Bean @Bean
@ -130,4 +138,5 @@ public class SecurityConfig {
}; };
} }
} }