Spring Security permitAll()에서 익명 접근 을 허용 하지 않 는 동작
수정 전
http
.addFilterBefore(muiltpartFilter, ChannelProcessingFilter.class)
.addFilterBefore(cf, ChannelProcessingFilter.class)
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.authorizeRequests()
.antMatchers("/ping**")
.permitAll()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login");
수정 후
http
.addFilterBefore(muiltpartFilter, ChannelProcessingFilter.class)
.addFilterBefore(cf, ChannelProcessingFilter.class)
.authorizeRequests()
.antMatchers("/ping**")
.permitAll()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login");
permitAll()순 서 는 XML 설정 에서 authorizeRequests().anyRequest().authenticate 를 마지막 으로 하 는 것 과 같이 매우 중요 합 니 다.Spring Security@PreAuthorize 차단 이 잘못 되 었 습 니 다.
1.spring security 를 사용 할 때 주석 사용
@PreAuthorize("hasAnyRole('ROLE_Admin')")
방법 에 대한 접근 권한 을 제어 할 수 없습니다.다음 과 같이 설정 합 니 다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsService userDetailsService;
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/res/**", "/login/login*").permitAll()
.anyRequest().authenticated()
.and().formLogin().loginPage("/login/login").defaultSuccessUrl("/")
.passwordParameter("password")
.usernameParameter("username")
.and().logout().logoutSuccessUrl("/login/login");
}
}
Controller 의 방법 은 다음 과 같 습 니 다.
@Controller
@RequestMapping("/demo")
public class DemoController extends CommonController{
@Autowired
private UserService userService;
@PreAuthorize("hasAnyRole('ROLE_Admin')")
@RequestMapping(value = "user-list")
public void userList() {
}
}
하나 사용 하기 ROLE 없 음Admin 권한 을 가 진 사용자 가 이 방법 에 접근 하 는 것 이 잘못 되 었 습 니 다.Security Config 수정:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/res/**", "/login/login*").permitAll()
.antMatchers("/demo/user-list").access("hasRole('ROLE_Admin')")
.anyRequest().authenticated()
.and().formLogin().loginPage("/login/login").defaultSuccessUrl("/")
.passwordParameter("password")
.usernameParameter("username")
.and().logout().logoutSuccessUrl("/login/login");
}
추가:
.antMatchers("/demo/user-list").access("hasRole('ROLE_Admin')")
정상적으로 차단 할 수 있다 는 것 은 방법 이 차단 되 지 않 았 다 는 것 을 의미한다.xml 기반 이 라면 설정 파일 에 다음 을 추가 해 야 합 니 다.
<security:global-method-security pre-post-annotations="enabled" proxy-target-class="true" />
Annotation 방식 으로 바 뀌 면@EnableGlobalMethodSecurity(prePost Enabled=true)주 해 를 사용 하여 열 어야 합 니 다.그리고 다음 과 같은 방법 을 제공 해 야 한다.
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
제대로 차단 할 수 있 습 니 다.이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.