При попытке подключить Spring Security по следующему коду https://github.com/proselytear/SpringSecurityApp проявилась 3 ошибки:
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /C:/Users/Tim/eclipse-workspace/springMVC-mybatis-postgresql-fbcda0e11b1addcac43be8813e16b8b703022591/src/main/java/com/core/newbie/impl/UserDetailsServiceImpl.java:[40,75] cannot find symbol
symbol: method getUsername()
location: variable user of type com.core.newbie.model.User
[ERROR] /C:/Users/Tim/eclipse-workspace/springMVC-mybatis-postgresql-fbcda0e11b1addcac43be8813e16b8b703022591/src/main/java/com/core/newbie/impl/UserServiceImpl.java:[49,16] cannot find symbol
symbol: method insetUser(com.core.newbie.model.User)
location: variable userDao of type com.core.newbie.dao.UserDao
[INFO] 2 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
User.java (брал изначально из https://github.com/rainningToSnow/springMVC-mybatis-postgresql, потом внес некоторые правки, попытавшись добавить связь с ролями; только с users в изначальном варианте работало):
package com.core.newbie.model;
import javax.persistence.*;
import java.util.Set;
public class User {
private Integer id;
private String userName;
private String password;
private Integer age;
@ManyToMany
@JoinTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
public Integer getId() {
return id;
}
public void setId(final Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(final String userName) {
this.userName = userName == null ? null : userName.trim();
}
public String getPassword() {
return password;
}
public void setPassword(final String password) {
this.password = password == null ? null : password.trim();
}
public Integer getAge() {
return age;
}
public void setAge(final Integer age) {
this.age = age;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}
UserDao.java:
package com.core.newbie.dao;
import com.core.newbie.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserDao extends JpaRepository<User, Long> {
User findByUsername(String username);
}
UserService.java:
package com.core.newbie.service;
import com.core.newbie.model.User;
public interface UserService {
User getUserById(int userId);
User findByUsername(String username);
void insetUser(User user);
}
UserServiceImpl:
package com.core.newbie.service;
import com.core.newbie.dao.RoleDao;
import com.core.newbie.dao.UserDao;
import com.core.newbie.model.Role;
import com.core.newbie.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.Set;
@Service
public abstract class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Autowired
private RoleDao roleDao;
@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
@Override
public void insetUser(User user) {
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
Set<Role> roles = new HashSet<>();
roles.add(roleDao.getOne(1L));
user.setRoles(roles);
userDao.insetUser(user);
}
@Override
public User findByUsername(String username) {
return userDao.findByUsername(username);
}
}
UserDetailsServiceImpl.java:
package com.core.newbie.service;
import com.core.newbie.dao.UserDao;
import com.core.newbie.model.Role;
import com.core.newbie.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);
}
}
UserActionTest.java:
package com.core.newbie.action;
import com.alibaba.fastjson.JSON;
import com.core.newbie.model.User;
import com.core.newbie.service.UserService;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})
public class UserActionTest {
private static final Logger logger = Logger.getLogger(UserActionTest.class);
private UserService userService;
@Autowired
public void setUserService(final UserService userService) {
this.userService = userService;
}
public UserService getUserService() {
return userService;
}
@Test
public void test1() {
final User user = userService.getUserById(1);
logger.info(JSON.toJSON(user));
}
@Test
public void test2() {
final User user = new User();
user.setId(112);
user.setAge(14);
user.setPassword("12");
user.setUserName("derrick-2");
userService.insetUser(user);
logger.info(JSON.toJSON(user));
}
}
Соединение к базе данных корректное. Помогите разобраться.
Структура проекта:
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости