2015-08-27 54 views
6

Tôi chỉ bắt đầu lập trình với Spring Security và tôi đã viết hệ thống nơi tôi lưu người dùng vào bảng bền bỉ qua Hibernate. Sử dụng tài liệu tham khảo Spring Security tôi đã viết đoạn mã này:Cách thêm người dùng mới vào Spring Security trong thời gian chạy

import org.springframework.beans.factory.annotation.Autowired; 

import org.springframework.context.annotation.*; 
import org.springframework.security.config.annotation.authentication.builders.*; 
import org.springframework.security.config.annotation.web.configuration.*; 

@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
      .inMemoryAuthentication() 
       .withUser("user").password("password").roles("USER"); 
    } 
} 

Và điều này hoạt động hoàn hảo, nhưng có một người dùng điểm được tải trong khi khởi động máy chủ. Tôi cần viết phương thức RegisterUser (User user) để thêm người dùng mới vào Spring Security trong thời gian chạy. Phương pháp này chỉ nên tập trung vào nhiệm vụ này. Tôi không biết làm thế nào để bắt đầu thực hiện tính năng này vì vậy cảm ơn cho bất kỳ lời khuyên! ;)

ofc Người dùng có các trường như đăng nhập, mật khẩu, chuỗi vai trò, v.v ...

Vui lòng không đăng giải pháp với Spring MVC. Hệ thống này là ứng dụng RESTful sử dụng Spring Web Boost và Xuân An Boost trong phiên bản 4.0.x

+0

Ai đó sẽ trợ giúp? –

+0

Có các ví dụ về Bảo mật mùa xuân + Hibernate, cung cấp cho nó một tìm kiếm. Ví dụ: http://www.mkyong.com/spring-security/spring-security-hibernate-annotation-example/ – holmis83

+0

bạn đã tìm giải pháp cho vấn đề của mình, bạn có thể đăng mã không? –

Trả lời

3

Bạn có thể muốn lưu trữ người dùng của bạn trong một cơ sở dữ liệu và không có trong bộ nhớ, nếu họ đang đăng ký :)

  1. tạo authorities cho người sử dụng

    List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 
    authorities.add(new SimpleGrantedAuthority("ROLE_USER")); 
    
  2. nhanh chóng cho người sử dụng (với một lớp học thực hiện UserDetails)

    UserDetails user = new User("[email protected]", passwordEncoder.encode("s3cr3t"), authorities); 
    
  3. Lưu người dùng ở nơi nào đó hữu ích. JdbcUserDetailsManager có thể lưu người dùng vào cơ sở dữ liệu dễ dàng.

    userDetailsManager.createUser(user); 
    
  4. Tạo một UsernamePasswordAuthenticationToken

    Authentication authentication = new UsernamePasswordAuthenticationToken(user, null, authorities); 
    
  5. Thêm sự thẩm định quyền sử dụng SecurityContext

    SecurityContextHolder.getContext().setAuthentication(authentication); 
    
+1

Tôi tạo người dùng này và SecurityContext ở đâu? –

+0

@PhilippJahoda SecurityContext được tạo bởi Spring. Bạn sẽ muốn tạo người dùng trong logic đăng ký của mình, sau khi nhận thông tin từ người dùng (chẳng hạn như tên người dùng và mật khẩu mong muốn của họ), có thể trong lớp dịch vụ được sử dụng bởi bộ điều khiển –

+0

Cảm ơn bạn đã trả lời. Tôi đang sử dụng URL được cung cấp/oauth/mã thông báo vào mùa xuân, điều đó có đúng không? Tôi có thể truy cập tên người dùng và mật khẩu được cung cấp cho url này ở đâu? –

0

mã này để thêm quyền cho người sử dụng hiện tại:

List<GrantedAuthority> authorities = new ArrayList<>(); 
authorities.add(new SimpleGrantedAuthority("ROLE_NEWUSERROLE'); 
    SecurityContextHolder.getContext().setAuthentication(
     new UsernamePasswordAuthenticationToken(
      SecurityContextHolder.getContext().getAuthentication().getPrincipal(), 
      SecurityContextHolder.getContext().getAuthentication().getCredentials(), 
      authorities) 
     ); 
Các vấn đề liên quan