Advertisement
Guest User

Untitled

a guest
Sep 24th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.52 KB | None | 0 0
  1. ![application structures][1]
  2.  
  3. package com.maxpro.controller;
  4.  
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7.  
  8.  
  9. @Controller
  10. public class LoginController {
  11.  
  12. private final String BASE_PATH = "/login";
  13. private final String LOGIN_PAGE = BASE_PATH + "/login";
  14.  
  15. @RequestMapping("/login")
  16. public String login() {
  17. return LOGIN_PAGE;
  18. }
  19.  
  20. }
  21.  
  22. <!DOCTYPE html>
  23. <html lang="en"
  24. xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
  25. xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"
  26. >
  27. <head>
  28. <title>Login</title>
  29. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  30. <meta name="viewport" content="width=device-width, initial-scale=1"/>
  31. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/>
  32. <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
  33. <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  34. <link th:href="@{/css/admin/admin.css}" rel="stylesheet"/>
  35.  
  36. </head>
  37.  
  38. <body>
  39. <div class="container">
  40.  
  41. <div class="alert alert-danger" th:if="${param.error}">
  42. <strong>Invalid username or password or both.</strong>
  43. </div>
  44.  
  45. <form class="form-signin" th:action="@{/login}" method="post">
  46. <h2 class="form-signin-heading text-center">sign in</h2>
  47. <input type="text" id="inputName" name="username" class="form-control" placeholder="Username"
  48. required="required" autofocus="autofocus"/>
  49. <input type="password" id="inputPassword" name="password" class="form-control" placeholder="Password"
  50. required="required"/>
  51. <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
  52. </form>
  53.  
  54. </div> <!-- /container -->
  55. </body>
  56. </html>
  57.  
  58. <!DOCTYPE html>
  59. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  60.  
  61. <html lang="en">
  62. <head>
  63. <title>Login</title>
  64. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  65. <meta name="viewport" content="width=device-width, initial-scale=1"/>
  66. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/>
  67. <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
  68. <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  69.  
  70. <!-- home.css -->
  71. <link rel="stylesheet" href="<c:url value = "/css/admin/admin.css"/>"/>
  72. <!-- /home.css -->
  73.  
  74. </head>
  75.  
  76. <body>
  77. <div class="container">
  78.  
  79. <c:if test="${param.error}">
  80. <div class="alert alert-danger">
  81. <strong>Invalid username or password or both.</strong>
  82. </div>
  83. </c:if>
  84.  
  85. <form class="form-signin" action="<c:url value="/login"/>" method="post">
  86. <h2 class="form-signin-heading text-center">sign in</h2>
  87. <input type="text" id="inputName" name="username" class="form-control" placeholder="Username"
  88. required="required" autofocus="autofocus"/>
  89. <input type="password" id="inputPassword" name="password" class="form-control" placeholder="Password"
  90. required="required"/>
  91. <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
  92. </form>
  93.  
  94. </div> <!-- /container -->
  95. </body>
  96. </html>
  97.  
  98. package com.maxpro.configuration.security;
  99.  
  100. import com.maxpro.repository.UserRepository;
  101. import org.springframework.beans.factory.annotation.Autowired;
  102. import org.springframework.context.annotation.Bean;
  103. import org.springframework.context.annotation.Configuration;
  104. import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
  105. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
  106. import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
  107. import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
  108. import org.springframework.security.core.userdetails.UserDetailsService;
  109. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  110. import org.springframework.security.crypto.password.PasswordEncoder;
  111. import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
  112.  
  113.  
  114. @Configuration
  115. @EnableWebSecurity
  116. public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
  117.  
  118. @Autowired
  119. private UserRepository userRepository;
  120.  
  121. @Override
  122. protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  123. auth.userDetailsService(userDetailsServiceBean()).passwordEncoder(passwordEncoder());
  124. }
  125.  
  126. @Override
  127. public UserDetailsService userDetailsServiceBean() throws Exception {
  128. return new WebUserDetailsService(userRepository);
  129. }
  130.  
  131. @Bean
  132. public PasswordEncoder passwordEncoder() {
  133. return new BCryptPasswordEncoder();
  134. }
  135.  
  136. @Override
  137. protected void configure(HttpSecurity http) throws Exception {
  138. http
  139. .authorizeRequests()
  140. .antMatchers("/css/**", "/img/**", "/js/**").permitAll()
  141. .antMatchers("/", "/home").permitAll()
  142. .antMatchers("/admin/**").hasAuthority("ROLE_ADMIN")
  143. .antMatchers("/user/**").hasAuthority("ROLE_USER")
  144. .anyRequest().authenticated()
  145. .and()
  146. .formLogin()
  147. .loginPage("/login")
  148. .usernameParameter("username").passwordParameter("password").permitAll()
  149. .and()
  150. .logout()
  151. .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
  152. .logoutSuccessUrl("/")
  153. .and()
  154. .exceptionHandling().accessDeniedPage("/access-denied")
  155. .and()
  156. .sessionManagement()
  157. // .and()
  158. // .csrf();
  159. ;
  160. }
  161.  
  162. }
  163.  
  164. package com.maxpro.configuration.security;
  165.  
  166. import com.maxpro.entity.Role;
  167. import com.maxpro.entity.User;
  168. import com.maxpro.repository.UserRepository;
  169. import org.springframework.beans.factory.annotation.Autowired;
  170. import org.springframework.security.core.GrantedAuthority;
  171. import org.springframework.security.core.authority.SimpleGrantedAuthority;
  172. import org.springframework.security.core.userdetails.UserDetails;
  173. import org.springframework.security.core.userdetails.UserDetailsService;
  174. import org.springframework.security.core.userdetails.UsernameNotFoundException;
  175.  
  176. import javax.transaction.Transactional;
  177. import java.util.HashSet;
  178. import java.util.Set;
  179.  
  180.  
  181. @Transactional
  182. public class WebUserDetailsService implements UserDetailsService {
  183.  
  184. @Autowired
  185. private UserRepository userRepository;
  186.  
  187. public WebUserDetailsService(UserRepository userRepository) {
  188. this.userRepository = userRepository;
  189. }
  190.  
  191. @Override
  192. public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
  193. try {
  194. User user = userRepository.findByUserName(username);
  195. if (user == null) {
  196. return null;
  197. }
  198. return new org.springframework.security.core.userdetails.User(user.getUserName(), user.getPassword(), getAuthorities(user));
  199. } catch (Exception e) {
  200. throw new UsernameNotFoundException("User not found");
  201. }
  202. }
  203.  
  204. private Set<GrantedAuthority> getAuthorities(User user) {
  205. Set<GrantedAuthority> authorities = new HashSet<>();
  206. for (Role role : user.getRoles()) {
  207. GrantedAuthority grantedAuthority = new SimpleGrantedAuthority(role.getName());
  208. authorities.add(grantedAuthority);
  209. }
  210. return authorities;
  211. }
  212.  
  213. }
  214.  
  215. #configurations
  216. spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
  217. spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
  218.  
  219. #initializations
  220. spring.jpa.hibernate.ddl-auto=update
  221. spring.jpa.show-sql=false
  222.  
  223. #credentials
  224. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  225. spring.datasource.url=jdbc:mysql://localhost:3306/spring_boot_security
  226. spring.datasource.username=root
  227. spring.datasource.password=ENC(fwPDBYsbkbHVwxDGEsutsQ==)
  228. spring.datasource.schema=classpath:/data/schema.sql
  229.  
  230. spring.mvc.view.prefix: /WEB-INF/jsp
  231. spring.mvc.view.suffix: .jsp
  232.  
  233. application.message: Hello World!!
  234.  
  235. .
  236. .
  237. .
  238.  
  239. ## following line commented
  240. #spring.datasource.schema=classpath:/data/schema.sql
  241.  
  242. <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement