2018-10-17 20: 05: 37.715 ОШИБКА 15968 --- [nio-8090-exec-3] waUsernamePasswordAuthenticationFilter: при попытке аутентификации пользователя произошла внутренняя ошибка.
org.springframework.security.authentication.InternalAuthenticationServiceException: требуется текстовое представление предоставленного полномочия
Вот мое SecurityConfig :
package com.project.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@ComponentScan(basePackages= {"com.project.*"})
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled=true)
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private MyAppUserDetailsService myAppUserDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/app/secure/**").hasAnyRole("ADMIN","USER")
.and().formLogin() //login configuration
.loginPage("/app/login")
.loginProcessingUrl("/app-login")
.usernameParameter("userName")
.passwordParameter("password")
.defaultSuccessUrl("/app/secure/temployee-details")
.and().logout() //logout configuration
.logoutUrl("/app-logout")
.logoutSuccessUrl("/app/login")
.and().exceptionHandling() //exception handling configuration
.accessDeniedPage("/app/error");
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
auth.userDetailsService(myAppUserDetailsService).passwordEncoder(passwordEncoder);
}
}
И UserDetailsService :
package com.project.config;
import java.util.Arrays;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import com.project.dao.IUserInfoDAO;
import com.project.entity.UserInfo;
@ComponentScan(basePackages= {"com.project.*"})
@Service
public class MyAppUserDetailsService implements UserDetailsService {
@Autowired
private IUserInfoDAO userInfoDAO;
@Override
public UserDetails loadUserByUsername(String userName)
throws UsernameNotFoundException {
UserInfo activeUserInfo = userInfoDAO.getActiveUser(userName);
GrantedAuthority authority = new SimpleGrantedAuthority(activeUserInfo.getRole());
UserDetails userDetails = (UserDetails)new User(activeUserInfo.getUserName(),
activeUserInfo.getPassword(), Arrays.asList(authority));
return userDetails;
}
}
UserInfoDao :
package com.project.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.project.entity.TEmployee;
import com.project.entity.UserInfo;
@ComponentScan(basePackages= {"com.project.*"})
@Repository
@Transactional
public class UserInfoDAO implements IUserInfoDAO {
@PersistenceContext
private EntityManager entityManager;
public UserInfo getActiveUser(String userName) {
UserInfo activeUserInfo = new UserInfo();
short enabled = 1;
List<?> list = entityManager.createQuery("SELECT u FROM UserInfo u WHERE userName=?1 and enabled=?2")
.setParameter(1, userName).setParameter(2, enabled).getResultList();
if(!list.isEmpty()) {
activeUserInfo = (UserInfo)list.get(0);
}
return activeUserInfo;
}
@SuppressWarnings("unchecked")
@Override
public List<TEmployee> getAllUserEmployees() {
String hql = "FROM TEmployee as t ORDER BY t.employee_id";
return (List<TEmployee>) entityManager.createQuery(hql).getResultList();
}
}
Я действительно не понимаю, почему я все еще получил. Требуется авторизованное текстовое представление.
Я добавил правильную роль в столбец «роль» в моей базе данных: ROLE_ADMIN
или ROLE_USER
, и здесь все в порядке.
Некоторые журналы:
2018-10-17 20: 05: 29.932 INFO 15968 --- [nio-8090-exec-1] oaccC [Tomcat]. [Localhost]. [/]: Инициализация Spring FrameworkServlet 'dispatcherServlet' 2018-10-17 20: 05: 29.932 INFO 15968 --- [nio-8090-exec-1] osweb.servlet.DispatcherServlet: FrameworkServlet 'dispatcherServlet': инициализация началась 2018-10-17 20: 05: 29.938 INFO 15968 --- [nio-8090-exec-1] osweb.servlet.DispatcherServlet: FrameworkServlet 'dispatcherServlet': инициализация завершена за 6 мс 2018-10-17 20: 05: 37.694 INFO 15968--- [nio-8090-exec-3] ohhiQueryTranslatorFactoryInitiator: HHH000397: Использование ASTQueryTranslatorFactory 2018-10-17 20: 05: 37.701 DEBUG 15968 --- [nio-8090-exec-3] org.hibernate.SQL: выберите userinfo0_.userid как userid1_1_, userinfo0_.enabled как enabled2_1_, userinfo0_.password в качестве password3_1_, userinfo0_.role в качестве role4_1_ из tuserid userinfo0_, где userinfo0_.userid =?и userinfo0_.enabled =?2018-10-17 20: 05: 37.701 TRACE 15968 --- [nio-8090-exec-3] ohtype.descriptor.sql.BasicBinder: параметр привязки [1] как [VARCHAR] - [kudelam] 2018-10-1720: 05: 37.701 TRACE 15968 --- [nio-8090-exec-3] ohtype.descriptor.sql.BasicBinder: параметр привязки [2] для [SMALLINT] - [1] 2018-10-17 20: 05: 37.715ОШИБКА 15968 --- [nio-8090-exec-3] waUsernamePasswordAuthenticationFilter: при попытке аутентификации пользователя произошла внутренняя ошибка.
org.springframework.security.authentication.InternalAuthenticationServiceException: требуется предоставление полномочий для текстового представления
Не могли бы вы взглянуть и осветить это?