2017-12-01 13 views
0

응용 프로그램에는 4 개의 역할과 페이지가 포함 된 4 개의 일치하는 폴더가 있습니다. 하나의 추가 폴더에는 여러 역할이 공유하는 페이지가 있습니다. 현재 제한이 없습니다. 테스터는 하나의 역할과 함께 사용하기 위해 책갈피를 복사하고 다른 역할로 로그인 할 때 붙여 넣음으로써 페이지에 직접 액세스 할 수 있음을 발견했습니다.스프링 보안으로 폴더의 모든 페이지를 보호하는 방법은 무엇입니까?

스프링 보안은 최소한으로 사용합니다. 데이터베이스에는 역할과 일치하는 테이블에 대한 enum이 있습니다. 사용자는 로그인 할 때 하나를 선택하여 여러 역할을 가질 수 있습니다.

나는 이와 같은 예제를 보았습니다. 이는 spring-security.xml 파일로 전달됩니다.

<http auto-config="true" use-expressions="true"> 
    <intercept-url pattern="/events/" access="hasRole('ROLE_ADMIN')"/> 
    <intercept-url pattern="/**" access="hasRole('ROLE_USER')"/> 
</http> 

나는 이런 식으로 코딩 싶습니다 : 로그인 한 사용자가로 정의의 역할을 포함하는 코드

<http auto-config="true" use-expressions="true"> 
    <intercept-url pattern="/administrator/**" access="hasRole('ROLE_ADMINISTRATOR')"/> 
    <intercept-url pattern="/client/**" access="hasRole('ROLE_CLIENT')"/> 
</http> 

:

public class LMSSession extends WebSession 

는 방법이 있나요 Wicket (7.9)을 사용하여 이것을 구현합니까? 당신이 봄 보안을 사용하는 경우

답변

0

당신은 일반적으로 다음 봄 보안 구성

exemple는 https://spring.io/blog/2013/07/03/spring-security-java-config-preview-web-security/

를 사용하고

@Override 
    protected void configure(HttpSecurity http) throws Exception { 
    http 
     .authorizeUrls() 
     .antMatchers("/signup","/about").permitAll() // #4 
     .antMatchers("/admin/**").hasRole("ADMIN") // #6 
     .anyRequest().authenticated() // 7 
     .and() 
    .formLogin() // #8 
     .loginUrl("/login") // #9 
     .permitAll(); // #5 
    } 
0

사용할 수있는 섹션 CustomWebSecurityConfigurerAdapter 및 방법을 확인하기위한 링크에 대한 클래스가 Spring Security의 HttpSecurity (또는 XML에 상응하는 것) 또는이를 수행하기위한 Wicket의 IAuthorizationStrategy.

그것은 당신이 다음 /client/page1/client/page2와 같은 사용자 역할을 수행해야합니다 귀하의 질문에 봄 보안 조각 (I 자바 구성 스타일을 선호에 따라 페이지를 장착, 그래서 XML이 완료되었음을 100 % 확실하지 오전!).

그러나 URL에 역할을 공개하고 싶지 않으면 wicket-auth-roles의 @AuthorizeInstantiation을 사용하면 쉽게 처리 할 수 ​​있습니다. wicket-examples은 그것에 대해 좋은 demo을 가지고 있습니다!

+0

'MetaDataRoleAuthorizationStrategy.authorize (.. class .., "role")'와 함께 전달 된 페이지에서 작동하지만 그렇게하지 않는 것이 좋습니다. 다른 페이지는'hasAnyRole'을 호출하지 않았습니다. – JoeAB