springとhibernateを使用して新しいユーザーを追加する方法について質問があります。私は認証に春のセキュリティを使用しており、oracle dbを使用して構成することができました。私が実装したいのは、新しいユーザーを登録することです。この場合の通常のアプローチは何ですか?私はいくつかの資料を読みましたが、それらのほとんどはjspで設計され実装されていました。クライアント側はangularjsで書かれています。 私がこれまで持っていることは、私はまた、いくつかのサービスが必要と考えている2つのエンドポイント/user
と/register
新規ユーザーをspringとhibernateで登録する
@Controller
public class UserController {
@Autowired
private RegisterService registerService;
@RequestMapping("/user")
@ResponseBody
public Principal user(Principal user) {
return user;
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
@ResponseBody
public void registerUser() {
User user = new User();
registerService.save(user);
}
}
とコントローラです。私の場合では、これはRegisterService
とそのサービスRegisterServiceImplの実装です:ここで
@Service
public class RegisterServiceImpl implements RegisterService {
@Autowired
private UserDao userDao;
@Autowired
private SessionFactory sessionFactory;
@Transactional
@Override
public void save(User user) {
// what should be the implementation of this method?
Session session = sessionFactory.getCurrentSession();
session.save(user);
}
}
は私のUserDao
エンティティクラスです:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsService userDetailsService;
@Autowired
LogoutSuccess logoutSuccess;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.httpBasic()
.and()
.authorizeRequests()
.antMatchers("/profile", "/logout", "/home").permitAll()
.anyRequest().authenticated()
.and()
.addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class)
.csrf().disable();
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/app/**");
}
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
@Bean
public PasswordEncoder passwordEncoder() {
PasswordEncoder encoder = new BCryptPasswordEncoder();
return encoder;
}
:
@Entity
@Table(name = "users")
public class User {
@Id
@Column(name = "id")
private int id;
@Column(name = "username")
private String userName;
@Column(name = "password")
private String password;
@Column(name = "email")
private String email;
@Column(name = "is_enabled")
private boolean isEnabled;
@ManyToOne
@JoinColumn(name = "department_id")
private Department department;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
private Set<UserRole> userRole = new HashSet<UserRole>(0);
public User() {
}
public User(String username, String password, Boolean isEnabled, Set<UserRole> userRole) {
this.userName = username;
this.password = password;
this.isEnabled = isEnabled;
this.userRole = userRole;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return userName;
}
public void setUsername(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public boolean isEnabled() {
return isEnabled;
}
public void setEnabled(boolean isEnabled) {
this.isEnabled = isEnabled;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
public Set<UserRole> getUserRole() {
return this.userRole;
}
public void setUserRole(Set<UserRole> userRole) {
this.userRole = userRole;
}
}
私のセキュリティ設定は次のようになります
}
ユーザ登録で私はUser
でクラスメンバのすべてを設定したいと思いますが、私はそれを達成する方法がわからないです。私は機密データのユーザー名とパスワードを送信するので、すべてのクラスメンバーに対して@PathVariable
を作成することは適切ではないと思います。あなたの答えに多くの感謝!
データベースにプレーンテキストとしてパスワードを保存していないと教えてください。 – bradimus
あなたは、春のセキュリティで既存のユーザーをどのように認証しているか明確には言及していません。どのようにあなたはちょうどangularjsとurページを設計しています。どのようにクライアントとサーバー間で通信していますか。あなたが提供した情報は少し不十分です – Acewin
彼らはプレイテキストとして格納されていません。私はBCryptPasswordEncoder – skywalker