Advertisement
Guest User

Untitled

a guest
Jul 3rd, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.97 KB | None | 0 0
  1. @Configuration
  2. @EnableWebMvc
  3. @ComponentScan(basePackages = {"ru.mightynoobs.springhibernate.controller",
  4. "ru.mightynoobs.springhibernate.service"})
  5. @Import({HibernateConfiguration.class, SpringSecurityConfig.class})
  6. public class SpringServletConfig extends WebMvcConfigurerAdapter {
  7.  
  8. @Bean
  9. public SpringResourceTemplateResolver templateResolver() {
  10. SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
  11. templateResolver.setPrefix("/WEB-INF/templates/");
  12. templateResolver.setSuffix(".html");
  13. templateResolver.setTemplateMode(TemplateMode.HTML);
  14. templateResolver.setCacheable(true);
  15. return templateResolver;
  16. }
  17.  
  18. @Bean
  19. public SpringTemplateEngine templateEngine() {
  20. SpringTemplateEngine templateEngine = new SpringTemplateEngine();
  21. templateEngine.setEnableSpringELCompiler(true);
  22. templateEngine.setTemplateResolver(templateResolver());
  23. templateEngine.setDialect(new SpringSecurityDialect());
  24. return templateEngine;
  25. }
  26.  
  27. @Bean
  28. public ViewResolver viewResolver() {
  29. ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
  30. viewResolver.setTemplateEngine(templateEngine());
  31. return viewResolver;
  32. }
  33.  
  34. @Override
  35. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  36. registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
  37. }
  38.  
  39. @Override
  40. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  41. configurer.enable();
  42. }
  43.  
  44. }
  45.  
  46. @Configuration
  47. @EnableTransactionManagement
  48. @ComponentScan({"ru.mightynoobs.springhibernate.dao.note",
  49. "ru.mightynoobs.springhibernate.dao.user"})
  50. @PropertySource(value = { "classpath:application.properties" })
  51. public class HibernateConfiguration {
  52. private Environment environment;
  53.  
  54. @Bean
  55. public LocalSessionFactoryBean sessionFactory() {
  56. LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
  57. sessionFactory.setDataSource(dataSource());
  58. sessionFactory.setPackagesToScan("ru.mightynoobs.springhibernate.model");
  59. sessionFactory.setHibernateProperties(hibernateProperties());
  60. return sessionFactory;
  61. }
  62.  
  63. @Bean
  64. public BasicDataSource dataSource() {
  65. BasicDataSource dataSource = new BasicDataSource();
  66. dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
  67. dataSource.setUrl(environment.getProperty("jdbc.url"));
  68. dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
  69. dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
  70. return dataSource;
  71. }
  72.  
  73. private Properties hibernateProperties() {
  74. Properties properties = new Properties();
  75. properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
  76. properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
  77. properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
  78. return properties;
  79. }
  80.  
  81. @Bean
  82. @Autowired
  83. public HibernateTransactionManager transactionManager(SessionFactory s) {
  84. HibernateTransactionManager txManager = new HibernateTransactionManager();
  85. txManager.setSessionFactory(s);
  86. return txManager;
  87. }
  88.  
  89. @Autowired
  90. public void setEnvironment(Environment environment) {
  91. this.environment = environment;
  92. }
  93. }
  94.  
  95. @Configuration
  96. @EnableWebSecurity
  97. @ComponentScan(basePackages = {"ru.mightynoobs.springhibernate.security",
  98. "ru.mightynoobs.springhibernate.dao.security",
  99. "ru.mightynoobs.springhibernate.service.user"})
  100. public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
  101.  
  102. private PersistentTokenRepository tokenRepository;
  103.  
  104. @Autowired
  105. public void setTokenRepository(PersistentTokenRepository tokenRepository) {
  106. this.tokenRepository = tokenRepository;
  107. }
  108.  
  109. @Override
  110. protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  111. auth.authenticationProvider(authenticationProvider());
  112. }
  113.  
  114. @Override
  115. protected void configure(HttpSecurity httpSecurity) throws Exception {
  116. httpSecurity
  117. .formLogin()
  118. .loginPage("/login.html")
  119. .failureUrl("/login-error.html")
  120. .and()
  121. .logout()
  122. .logoutSuccessUrl("/index.html")
  123. .and()
  124. .authorizeRequests()
  125. .antMatchers("/home.html")
  126. .access("hasRole('USER') or hasRole('ADMIN') or hasRole('DBA')")
  127. .and()
  128. .rememberMe().rememberMeParameter("remember-me").tokenRepository(tokenRepository)
  129. .tokenValiditySeconds(86400)
  130. .and()
  131. .exceptionHandling()
  132. .accessDeniedPage("/access_denied.html");
  133. }
  134.  
  135. @Bean
  136. public PasswordEncoder passwordEncoder() {
  137. return new BCryptPasswordEncoder();
  138. }
  139.  
  140. @Bean
  141. public PersistentTokenBasedRememberMeServices persistentTokenBasedRememberMeServices() throws Exception{
  142. return new PersistentTokenBasedRememberMeServices("remember-me", userDetailsServiceBean(), tokenRepository);
  143. }
  144.  
  145. @Override
  146. @Bean
  147. public UserDetailsService userDetailsServiceBean() throws Exception {
  148. return new CustomUserDetailsService();
  149. }
  150.  
  151. @Bean
  152. public DaoAuthenticationProvider authenticationProvider() throws Exception{
  153. DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
  154. daoAuthenticationProvider.setPasswordEncoder(passwordEncoder());
  155. daoAuthenticationProvider.setUserDetailsService(userDetailsServiceBean());
  156. return daoAuthenticationProvider;
  157. }
  158. }
  159.  
  160. public class SpringMainInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
  161.  
  162. public SpringMainInitializer() {
  163. super();
  164. }
  165.  
  166. @Override
  167. protected Class<?>[] getRootConfigClasses() {
  168. return new Class[]{HibernateConfiguration.class, SpringSecurityConfig.class};
  169. }
  170.  
  171. @Override
  172. protected Class<?>[] getServletConfigClasses() {
  173. return new Class[] {SpringServletConfig.class};
  174. }
  175.  
  176. @Override
  177. protected String[] getServletMappings() {
  178. return new String[]{"/"};
  179. }
  180. }
  181.  
  182. public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
  183. }
  184.  
  185. @Service
  186. public class CustomUserDetailsService implements UserDetailsService {
  187. private static final Logger log = LoggerFactory.getLogger(CustomUserDetailsService.class);
  188. private UserService userService;
  189.  
  190.  
  191. @Override
  192. @Transactional(readOnly = true)
  193. public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException {
  194. User user = userService.getUserByLogin(login);
  195. log.info("User : {}", user);
  196. if (user == null) {
  197. log.info("User not found");
  198. throw new UsernameNotFoundException("User not found");
  199. }
  200. return new org.springframework.security.core.userdetails.User(user.getLogin(), user.getPassword(),
  201. true, true, true, true, getGrantedAuthorities(user));
  202. }
  203.  
  204. private List<GrantedAuthority> getGrantedAuthorities(User user) {
  205. List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
  206. for (Role role : user.getRoles()) {
  207. log.info("UserProfile : {}", role);
  208. grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_"+role.getRoleName()));
  209. }
  210. log.info("authorities : {}", grantedAuthorities);
  211. return grantedAuthorities;
  212. }
  213.  
  214. @Autowired
  215. public void setUserService(UserService userService) {
  216. this.userService = userService;
  217. }
  218. }
  219.  
  220. @Controller
  221. @SessionAttributes("roles")
  222. public class SecurityController {
  223. private UserService userService;
  224. private RoleService roleService;
  225. private MessageSource messageSource;
  226. private PersistentTokenBasedRememberMeServices persistentTokenBasedRememberMeServices;
  227.  
  228. @RequestMapping("/")
  229. public String login(Model model) {
  230. return "redirect:/index.html";
  231. }
  232.  
  233. @RequestMapping("/login.html")
  234. public String login() {
  235. return "login";
  236. }
  237.  
  238. @RequestMapping("/login-error.html")
  239. public String refuse(Model model) {
  240. /*System.out.println(model.containsAttribute("loginError"));
  241. model.addAttribute("loginError", true);
  242. System.out.println(model.containsAttribute("loginError"));*/
  243. return "login";
  244. }
  245.  
  246. @RequestMapping("/index.html")
  247. public String index() {
  248. return "index";
  249. }
  250.  
  251. @RequestMapping("/home.html")
  252. public String home() {
  253. return "home";
  254. }
  255.  
  256. @RequestMapping("/access_denied.html")
  257. public String denied() {
  258. return "access_denied";
  259. }
  260.  
  261.  
  262. @Autowired
  263. @Qualifier("userService")
  264. public void setUserService(UserService userService) {
  265. this.userService = userService;
  266. }
  267.  
  268. @Autowired
  269. @Qualifier("roleService")
  270. public void setRoleService(RoleService roleService) {
  271. this.roleService = roleService;
  272. }
  273.  
  274. @Autowired
  275. public void setMessageSource(MessageSource messageSource) {
  276. this.messageSource = messageSource;
  277. }
  278.  
  279. @Autowired
  280. public void setPersistentTokenBasedRememberMeServices(PersistentTokenBasedRememberMeServices persistentTokenBasedRememberMeServices) {
  281. this.persistentTokenBasedRememberMeServices = persistentTokenBasedRememberMeServices;
  282. }
  283. }
  284.  
  285. <!DOCTYPE html>
  286. <html xmlns:th="http://www.thymeleaf.org">
  287. <head>
  288. <title>Login page</title>
  289. </head>
  290. <body>
  291. <p th:if="${loginError}" class="error">Wrong user or password</p>
  292. <form th:action="@{/login}" method="post">
  293. <div>Username: <input type="text" name="username"/> </div>
  294. <div>Password: <input type="password" name="password"/> </div>
  295. <div>Remember Me: <input type="checkbox" name="remember-me" /> </div>
  296. <div><input type="submit" value="Sign In"/></div>
  297. </form>
  298. </body>
  299. </html>
  300.  
  301. <!DOCTYPE html>
  302. <html xmlns:th="http://www.thymeleaf.org">
  303. <html lang="en">
  304. <head>
  305. <meta charset="UTF-8">
  306. <title>Oh my god!</title>
  307. </head>
  308. <body>
  309. <h1>IT WORKS!</h1>
  310. <div>Go to <a href="home.html" th:href="@{/home.html}">Home</a></div>
  311. </body>
  312. </html>
  313.  
  314. <!DOCTYPE html>
  315. <html xmlns:th="http://www.thymeleaf.org">
  316.  
  317. <head>
  318. <title>Our notes app</title>
  319. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  320. </head>
  321.  
  322. <body>
  323. <script type="text/javascript" th:src="@{/resources/js/test.js}"></script>
  324.  
  325. <p>Welcome to our Notes App!</p>
  326.  
  327. </body>
  328.  
  329. </html>
  330.  
  331. <!DOCTYPE html>
  332. <html xmlns:th="http://www.thymeleaf.org">
  333. <head>
  334. <title>Error page</title>
  335. <meta charset="utf-8" />
  336. </head>
  337. <body>
  338. <h1>FORBIDDEN</h1>
  339. <a href="index.html" th:href="@{/index.html}">Back to Home Page</a>
  340. </body>
  341. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement