Advertisement
Guest User

Untitled

a guest
Mar 14th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.30 KB | None | 0 0
  1. Type Exception Report
  2.  
  3. Message Filter execution threw an exception
  4.  
  5. Description The server encountered an unexpected condition that prevented it from fulfilling the request.
  6.  
  7. Exception
  8.  
  9. javax.servlet.ServletException: Filter execution threw an exception
  10. Root Cause
  11.  
  12. java.lang.StackOverflowError
  13. org.apache.commons.logging.impl.Log4JLogger.isDebugEnabled(Log4JLogger.java:273)
  14. org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:161)
  15. org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$AuthenticationManagerDelegator.authenticate(WebSecurityConfigurerAdapter.java:494)
  16. org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:199)
  17. org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$AuthenticationManagerDelegator.authenticate(WebSecurityConfigurerAdapter.java:494)
  18. org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:199)
  19. org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$AuthenticationManagerDelegator.authenticate(WebSecurityConfigurerAdapter.java:494)
  20. org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:199)
  21.  
  22. @Configuration
  23. @PropertySource("classpath:db.properties")
  24. @EnableTransactionManagement
  25. @ComponentScan(value = {"my.example.service", "my.example.dao"})
  26. public class SpringConfig {
  27. @Autowired
  28. private Environment environment;
  29.  
  30. @Bean
  31. public DataSource getDataSource(){
  32. DriverManagerDataSource dataSource = new DriverManagerDataSource();
  33. dataSource.setUrl("jdbc:mysql://localhost:3306/mydbtest");
  34. dataSource.setUsername("root");
  35. dataSource.setPassword("1234");
  36. dataSource.setDriverClassName("com.mysql.jdbc.Driver");
  37. return dataSource;
  38. }
  39. @Bean
  40. public LocalSessionFactoryBean getSessionFactory() {
  41. LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
  42. factoryBean.setDataSource(getDataSource());
  43.  
  44. Properties props = new Properties();
  45. props.put("hibernate.show_sql", environment.getProperty("hibernate.show_sql"));
  46. props.put("hibernate.hbm2ddl.auto", environment.getProperty("hibernate.hbm2ddl.auto"));
  47.  
  48. factoryBean.setHibernateProperties(props);
  49. factoryBean.setAnnotatedClasses(User.class, Role.class);
  50. return factoryBean;
  51. }
  52. @Bean
  53. public HibernateTransactionManager getTransactionManager() {
  54. HibernateTransactionManager transactionManager = new HibernateTransactionManager();
  55. transactionManager.setSessionFactory(getSessionFactory().getObject());
  56. return transactionManager;
  57. }
  58. }
  59. @Configuration
  60. @EnableWebSecurity
  61. public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
  62. @Override
  63. protected void configure(HttpSecurity http) throws Exception {
  64. http.authorizeRequests().antMatchers("/").access("hasAnyRole('ROLE_ADMIN', 'ROLE_USER')")
  65. .antMatchers("/welcome").access("hasAnyRole('ROLE_ADMIN', 'ROLE_USER')")
  66. .antMatchers("/admin").access("hasRole('ROLE_ADMIN')").and()
  67. .formLogin().loginPage("/login").usernameParameter("username").passwordParameter("password")
  68. .successForwardUrl("/welcome").failureForwardUrl("/login?error").and().logout().logoutSuccessUrl("/login?logout");
  69. }
  70. @Bean
  71. @Override
  72. public AuthenticationManager authenticationManager() throws Exception {
  73. return super.authenticationManagerBean();
  74. }
  75. }
  76. public class WebAppInit extends AbstractAnnotationConfigDispatcherServletInitializer {
  77. @Override
  78. protected Class<?>[] getRootConfigClasses() {
  79. return new Class[]{WebConfig.class, SpringConfig.class};
  80. }
  81.  
  82. @Override
  83. protected Class<?>[] getServletConfigClasses() {
  84. return null;
  85. }
  86.  
  87. @Override
  88. protected String[] getServletMappings() {
  89. return new String[]{"/"};
  90. }
  91. }
  92. @Configuration
  93. @EnableWebMvc
  94. @ComponentScan(basePackages = "my.example.controller")
  95. @Import(SpringSecurityConfig.class)
  96. public class WebConfig extends WebMvcConfigurerAdapter {
  97. @Override
  98. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  99. registry.addResourceHandler("/WEB-INF/resources/**").addResourceLocations("/resources/");
  100. }
  101.  
  102. @Bean
  103. public InternalResourceViewResolver setupViewResolver(){
  104. InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
  105. viewResolver.setPrefix("WEB-INF/views/");
  106. viewResolver.setSuffix(".jsp");
  107. viewResolver.setViewClass(JstlView.class);
  108. return viewResolver;
  109. }
  110. }
  111.  
  112. @Controller
  113. public class UserController {
  114. @Autowired
  115. private UserService userService;
  116.  
  117. @Autowired
  118. private SecurityService securityService;
  119.  
  120. @Autowired
  121. private Validator userValidator;
  122.  
  123. @GetMapping("/registration")
  124. public String registration(Model model){
  125. model.addAttribute("userForm", new User());
  126. return "registration";
  127. }
  128. @PostMapping("/registration")
  129. public String registration(@ModelAttribute("userForm") User user, BindingResult result, Model model){
  130. userValidator.validate(user, result);
  131. if (result.hasErrors())
  132. return "registration";
  133. userService.save(user);
  134. securityService.autoLogin(user.getUsername(), user.getConfirmPassword());
  135. return "redirect:/welcome";
  136. }
  137. @GetMapping("/login")
  138. public String login(Model model, String error, String logout){
  139. if (error != null)
  140. model.addAttribute("error", "Username or password is incorrect");
  141. if (logout != null)
  142. model.addAttribute("message", "Logged out successfully");
  143. return "login";
  144. }
  145. @RequestMapping({"/", "/welcome"})
  146. public String welcome(){
  147. return "welcome";
  148. }
  149. @GetMapping("/admin")
  150. public String admin(){
  151. return "admin";
  152. }
  153. }
  154.  
  155. @Entity
  156. @Table(name = "ROLES")
  157. public class Role {
  158. @Id
  159. @GeneratedValue(strategy = GenerationType.IDENTITY)
  160. private Long id;
  161.  
  162. @Column(name = "NAME")
  163. private String name;
  164.  
  165. @ManyToMany(mappedBy = "roles")
  166. private Set<User> users;
  167. getter and setter
  168.  
  169. @Entity
  170. @Table(name = "USERS")
  171. public class User {
  172. @Id
  173. @GeneratedValue(strategy = GenerationType.IDENTITY)
  174. private Long id;
  175.  
  176. @Column(name = "USERNAME")
  177. private String username;
  178.  
  179. @Column(name = "PASSWORD")
  180. private String password;
  181.  
  182. @Transient
  183. private String confirmPassword;
  184.  
  185. @ManyToMany
  186. @JoinTable(name = "USER_ROLES", joinColumns = @JoinColumn(name = "user_id"),
  187. inverseJoinColumns = @JoinColumn(name = "roles_id"))
  188. private Set<Role> roles;
  189.  
  190. getter and setter
  191.  
  192. @Repository
  193. public class RoleDaoImpl implements RoleDao {
  194. private final static Logger logger = Logger.getLogger(RoleDaoImpl.class);
  195.  
  196. @Autowired
  197. private SessionFactory sessionFactory;
  198.  
  199. @Override
  200. @Transactional
  201. public Role findById(Long id) {
  202. Session session = sessionFactory.getCurrentSession();
  203. Role role = session.load(Role.class, id);
  204. logger.info("Class load: " + role);
  205. return role;
  206. }
  207. }
  208. @Repository
  209. public class UserDaoImpl implements UserDao {
  210. private static final Logger logger = Logger.getLogger(UserDaoImpl.class);
  211.  
  212. @Autowired
  213. private SessionFactory sessionFactory;
  214.  
  215. @Override
  216. @Transactional
  217. public User findByUsername(String username) {
  218. List<User> list = getUserList();
  219. for (User u : list){
  220. if (u.getUsername().equals(username))
  221. return u;
  222. }
  223. return null;
  224. }
  225.  
  226. @Override
  227. @Transactional
  228. public void add(User user) {
  229. sessionFactory.getCurrentSession().save(user);
  230. }
  231.  
  232. @Override
  233. @Transactional
  234. @SuppressWarnings("unchecked")
  235. public List<User> getUserList(){
  236. return (List<User>) sessionFactory.getCurrentSession().createQuery("from User").list();
  237. }
  238. }
  239.  
  240. @Service
  241. public class SecurityServiceImple implements SecurityService {
  242. @Autowired
  243. private AuthenticationManager authenticationManager;
  244.  
  245. @Autowired
  246. private UserDetailsService userDetailsService;
  247.  
  248. @Override
  249. public String findLoggedInUsername() {
  250. Object userDetails = SecurityContextHolder.getContext().getAuthentication().getDetails();
  251. if (userDetails instanceof UserDetails)
  252. return ((UserDetails)userDetails).getUsername();
  253. return null;
  254. }
  255.  
  256. @Override
  257. public void autoLogin(String username, String password) {
  258. UserDetails userDetails = userDetailsService.loadUserByUsername(username);
  259. UsernamePasswordAuthenticationToken authenticationToken =
  260. new UsernamePasswordAuthenticationToken(userDetails, password, userDetails.getAuthorities());
  261. authenticationManager.authenticate(authenticationToken);
  262.  
  263. if (authenticationToken.isAuthenticated())
  264. SecurityContextHolder.getContext().setAuthentication(authenticationToken);
  265. }
  266. }
  267. @Service
  268. public class UserDetailsImpl implements UserDetailsService {
  269. @Autowired
  270. private UserDao userDao;
  271.  
  272. @Override
  273. @Transactional(readOnly = true)
  274. public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
  275. User user = userDao.findByUsername(s);
  276. Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
  277. for (Role role : user.getRoles()){
  278. grantedAuthorities.add(new SimpleGrantedAuthority(role.getName()));
  279. }
  280. return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), grantedAuthorities);
  281. }
  282. }
  283. @Service
  284. public class UserServiceImpl implements UserService {
  285. @Autowired
  286. private UserDao userDao;
  287.  
  288. @Autowired
  289. private RoleDao roleDao;
  290.  
  291. @Override
  292. public void save(User user) {
  293. user.setPassword(user.getPassword());
  294. Set<Role> roles = new HashSet<>();
  295. roles.add(roleDao.findById(1L));
  296. user.setRoles(roles);
  297. userDao.add(user);
  298. }
  299.  
  300. @Override
  301. public User findByUsername(String name) {
  302. return userDao.findByUsername(name);
  303. }
  304. }
  305.  
  306. @Bean(name = BeanIds.AUTHENTICATION_MANAGER)
  307. @Override
  308. public AuthenticationManager authenticationManagerBean() throws Exception {
  309. return super.authenticationManagerBean();
  310. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement