2016-11-27 10 views
0

セキュリティでSpringにアプリケーションを作成します。私はユーザーとデータベースを作って、データベースからユーザーとしてアプリケーションにログインすることができます。しかし、DBに新しいユーザーを登録しようとすると、保存されません。ユーザーはデータベースに格納されていませんSpring

私はエラーを報告していない、ただメインページにリダイレクトします。

私がオートログ文字列のコメントを外すと、Null Point EXが表示されます。ここで

は私のアプリの構造である:

enter image description here

UserServiceImpl.class:

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 
import java.util.HashSet; 
import java.util.Set; 

import com.ya.pokupay.dao.RoleDAO; 
import com.ya.pokupay.dao.UserDAO; 
import com.ya.pokupay.model.Role; 
import com.ya.pokupay.model.User; 
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 

@Service 
public class UserServiceImpl implements UserService { 

    @Autowired 
    private UserDAO userDao; 

    @Autowired 
    private RoleDAO roleDao; 

    @Override 
    public void save(User user) { 
     System.out.println("HERE"); 
     Set<Role> roles = new HashSet<>(); 
     roles.add(roleDao.getOne(1L)); 
     user.setRoles(roles); 
     System.out.println("user: " + user); 
     userDao.save(user); 
    } 

    @Override 
    public User findByUsername(String username) { 
     return userDao.findByUsername(username); 
    } 
} 

コントローラ方法:

@RequestMapping(value = "/registration", method = RequestMethod.POST) 
    public String registration(@ModelAttribute("userForm") User userForm, BindingResult bindingResult, Model model) { 
     userValidator.validate(userForm, bindingResult); 

     if (bindingResult.hasErrors()) { 
      return "registration"; 
     } 

     userService.save(userForm); 

     //securityService.autoLogin(userForm.getUsername(), userForm.getConfirmPassword()); 

     return "redirect:/all"; 
    } 

UserDetailServiceImpl:

import com.ya.pokupay.dao.UserDAO; 
import com.ya.pokupay.model.Role; 
import com.ya.pokupay.model.User; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.security.core.GrantedAuthority; 
import org.springframework.security.core.authority.SimpleGrantedAuthority; 
import org.springframework.security.core.userdetails.UserDetails; 
import org.springframework.security.core.userdetails.UserDetailsService; 
import org.springframework.security.core.userdetails.UsernameNotFoundException; 
import org.springframework.transaction.annotation.Transactional; 

import java.util.HashSet; 
import java.util.Set; 

public class UserDetailsServiceImpl implements UserDetailsService{ 

    @Autowired 
    private UserDAO userDao; 

    @Override 
    @Transactional(readOnly = true) 
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
     User user = userDao.findByUsername(username); 

     Set<GrantedAuthority> grantedAuthorities = new HashSet<>(); 

     for (Role role : user.getRoles()) {   
      grantedAuthorities.add(new SimpleGrantedAuthority(role.getName())); 
     } 
     return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), grantedAuthorities); 
    } 
} 

もし私がいくつかのコードや設定を追加することができます。

EDITED:

UserDAO:

import com.ya.pokupay.model.User; 
import org.springframework.data.jpa.repository.JpaRepository; 

public interface UserDAO extends JpaRepository<User, Long> { 
    User findByUsername(String username); 
} 
+0

サービスに関連する取引はありません。取引がなければ、それほど多くは永続することはありません。 –

+0

@ M.Deinum、私は問題のUserDAOを追加しました。 JPAからの保存メソッドの実現があります。 – Dmitry

+0

@Dmitryあなたは確かですか?userService.save(userForm);ラインがヒット? – kuhajeyan

答えて

0

私は解決策を見つけられませんでしたので、私はちょうどasve方法の私の独自の実装を書いて、それが私のために動作します。

関連する問題