2016-02-03 1 views
3

У меня есть следующие классы:Как я могу написать весеннюю безопасность без использования какой-либо таблицы ролей в базе данных?

class User{ 
    private int id; 
    private String email; 
    private String password; 
} 

class Admin extends User{ 
    // the same fields as in User class 
} 

class REDAdmin extends User{ 
    private String company; 
    private String description; 
} 

class Customers extends User{ 
    private String FirstName; 
    private String LastName; 
    .... 
} 

В моей БД, мне не нужен какой-либо роли таблицы безопасности-context.xml

«http://www.springframework.org/schema/beans /spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd «>

<!-- enable use-expressions --> 
<http auto-config="true" use-expressions="true"> 
    <intercept-url pattern="/admin**" access="hasRole('ROLE_ADMIN')" /> 
    <intercept-url pattern="/REDadmin**" access="hasRole('ROLE_REDADMIN')" /> 
    <intercept-url pattern="/user**" access="hasRole('ROLE_USER')" /> 

    <!-- access denied page --> 
    <access-denied-handler error-page="/403" /> 
    <form-login 
     login-page="/login" 
     default-target-url="/welcome" 
     authentication-failure-url="/login?error" 
     username-parameter="username" 
     password-parameter="password" /> 
    <logout logout-success-url="/login?logout" /> 
    <!-- enable csrf protection --> 
    <csrf/> 
</http> 

'

+0

Как ваша конфигурация выглядит? – hotzst

+0

Я использую спящий режим. Таблица Пользователи должны иметь индивидуальную аннотацию спящего режима с таблицей Admin, REDadmin и Customers. Я не знаю, как настроить Spring-security.xml и другие файлы. – Roma

+0

Не уверен, но думаю, что это невозможно. Взгляните [здесь] (https://docs.spring.io/spring-security/site/docs/3.0.x/reference/appendix-schema.html) –

ответ

1

Если вам не требуется управлять ролями с помощью отношения, вы можете вернуть фиксированный набор ролей в классы сущностей. Пользователь/счет должен осуществлять UserDetails договора - например:

class User implements UserDetails { 

    private final Set<GrantedAuthority> authorities = new HashSet<>(); 

    public User() { 
     authorities.add(new SimpleGrantedAuthority("USER")); 
     // ... add further roles if required 
    } 

    public Collection<GrantedAuthority> getAuthorities() { 
     return authorities; 
    } 

    ... 
} 

См: GrantedAuthority, SimpleGrantedAuthority

+0

Это правильный ответ! – mizerablebr