• 0909.804.713
  • cskh@laptrinhjavaweb.com

7 Ngày học java master V1 (24 - 30/7/2023)

Đây là nội dung tài liệu sử dụng trong chương trình 7 học ngày java master V1

Học spring framework cơ bản miễn phí

- Viết api web service trong spring framework: HỌC SPRING BOOT

- Thiết kế website trong spring framework: HỌC SPRING MVC

Mục lục chương trình

Ngày 1: Giải các bài toán về mảng, chuỗi

Ngày 2: Spring security trong spring boot, spring framework phần 1

Ngày 3: Spring security trong spring boot, spring framework phần 2

Ngày 4: Spring security trong spring boot, spring framework phần 3

Ngày 5: Triển khai project lên java hosting

Ngày 6: Lộ trình học java backend kiếm hàng chục triệu VNĐ mỗi tháng

Ngày 7: Đi làm tại công ty như thế nào để thăng tiến và tăng thu nhập

Ngày 1: giải các bài toán về mảng, chuỗi

Trong nội dung ngày 1 này, Laptrinhjavaweb sẽ cùng với các bạn giải các bài toán về mảng, chuỗi trong Java để ôn tập, cải thiện tư duy cũng như chuẩn bị cho các đợt đi phỏng vấn sắp tới nếu như công ty test logic thông qua các bài toàn này

Ngoài ra ngày 1 các bạn chỉ nên làm những thứ nhẹ nhàng, dễ chịu giúp tạo đà để sang các ngày sau học hiệu quả hơn

1. Tìm số lớn thứ 2 trong mảng

Mô tả đề bài

Cho 1 mảng: {7,5,6,1,4,2}

Kết quả mong muốn: 6

Hướng giải quyết

public static void main(String args[]) {

        int[] arr1={7,5,6,1,4,2};

        int secondHighest=findSecondLargestNumberInTheArray(arr1);

        System.out.println("Second largest element in the array : "+ secondHighest);

    }

 

    public static int findSecondLargestNumberInTheArray(int array[]) {

        int highest = Integer.MIN_VALUE;

        int secondHighest = Integer.MIN_VALUE;

        for (int i = 0; i < array.length; i++) {            

            if (array[i] > highest) {

                secondHighest = highest;         

                highest = array[i];

            } else if (array[i] > secondHighest && array[i]!=highest)               

                secondHighest = array[i];

        }

        return secondHighest;

    }

2. Kiểm tra xem chuỗi có bao gồm các kí tự duy nhất hay không

Mô tả đề bài

Cho các chuỗi: "laptrinhjavaweb", "academy", "shop", "software"

Kết quả mong muốn:

- Chuỗi "laptrinhjavaweb có chứa các kí tự duy nhất không" : false

- Chuỗi "academy có chứa các kí tự duy nhất không" : false

- Chuỗi "shop có chứa các kí tự duy nhất không" : true

- Chuỗi "software có chứa các kí tự duy nhất không" : true

Hướng giải quyết

public static void main(String[] args) {

               System.out.println("laptrinhjavaweb has all unique chars : "+ hasAllUniqueChars("laptrinhjavaweb"));

               System.out.println("academy has all unique chars : "+ hasAllUniqueChars("academy"));

               System.out.println("shop has all unique chars : "+ hasAllUniqueChars("shop"));

               System.out.println("software has all unique chars : "+ hasAllUniqueChars("software"));

              }

              

              public static boolean hasAllUniqueChars (String word) {            

                  for(int index=0;index < word.length(); index ++)   {      

                      char c =word.charAt(index);

                      if(word.indexOf(c) != word.lastIndexOf(c)) {

                           return false;

                      }

                  }      

                  return true;

       }

Ngày 2: Spring security trong spring boot, spring framework phần 1

Để học các nội dung ngày 2,3,4 hiệu quả. Bạn cần làm trước nội dung sau nhé: TẠO PROJECT WEBSITE TRONG SPRING BOOT

Ngoài ra bạn cũng phải xem qua 2 series về spring framework sau của Laptrinhjavaweb nhé để các buổi 2,3,4 chất lượng hơn cũng như hiểu bài hơn

1. Học java backend web service: HỌC SPRING BOOT

2. Học thiết kế website: HỌC SPRING MVC

1. Thêm đoạn code sau vào file MvcConfig.java

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler(
"/template/**").addResourceLocations("/template/");
}

2. Trong folder webapp -> Tạo folder template và thêm các file phía dưới vào folder template

link download: https://drive.google.com/file/d/1bx3rIO-aBTFdLf4pp0_Z4DeHdR9BVq8F/view?usp=sharing

3. Trong file HomeController.java thêm đoạn code sau

@RequestMapping(value = "/login", method = RequestMethod.GET)
public ModelAndView loginPage() {
   ModelAndView mav =
new ModelAndView("login");
  
return mav;
}

4. File home.jsp thay thế bằng đoạn code phía dưới

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>Trang chủ</title>
    <!-- jquery -->
   
<script type='text/javascript' src='<c:url value="/template/js/2.1.4/jquery.min.js" />'></script>

    <link rel="stylesheet" href="<c:url value='/template/assets/css/bootstrap.min.css' />" />
    <link rel="stylesheet" href="<c:url value='/template/font-awesome/4.5.0/css/font-awesome.min.css' />" />
    <link rel="stylesheet" href="<c:url value='/template/assets/css/ace.min.css' />" class="ace-main-stylesheet" id="main-ace-style" />
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
</head>
<body class="no-skin">

<div class="main-container ace-save-state" id="main-container">

    <script type="text/javascript">
        try{ace.settings.loadState('main-container')}catch(e){}
    </
script>

    <%-- menu --%>
   
<div id="sidebar" class="sidebar                  responsive                    ace-save-state">
        <script type="text/javascript">
            try {
               
ace.settings.loadState('sidebar')
            }
catch (e) {
            }
        </
script>
        <div class="sidebar-shortcuts">
            <div class="sidebar-shortcuts-large">
                <button class="btn btn-success">
                    <i class="ace-icon fa fa-signal"></i>
                </button>

                <button class="btn btn-info">
                    <i class="ace-icon fa fa-pencil"></i>
                </button>

                <button class="btn btn-warning">
                    <i class="ace-icon fa fa-users"></i>
                </button>

                <button class="btn btn-danger">
                    <i class="ace-icon fa fa-cogs"></i>
                </button>
            </div>
            <div class="sidebar-shortcuts-mini">
                <span class="btn btn-success"></span>

                <span class="btn btn-info"></span>

                <span class="btn btn-warning"></span>

                <span class="btn btn-danger"></span>
            </div>
        </div>
        <ul class="nav nav-list">
            <li class="">
                <a href="#" class="dropdown-toggle">
                    <i class="menu-icon fa fa-newspaper-o"></i>
                    <span class="menu-text">QL bài viết và tài khoản</span>
                    <b class="arrow fa fa-angle-down"></b>
                </a>
                <b class="arrow"></b>
                <ul class="submenu">
                    <li class="">
                        <a href=''>
                            <i class="menu-icon fa fa-caret-right"></i>
                            DS bài viết
                        </
a>
                        <b class="arrow"></b>
                    </li>
                </ul>
                <ul class="submenu">
                    <li class="">
                        <a href=''>
                            <i class="menu-icon fa fa-caret-right"></i>
                            DS tài khoản
                        </
a>
                        <b class="arrow"></b>
                    </li>
                </ul>
            </li>
        </ul>
        <div class="sidebar-toggle sidebar-collapse" id="sidebar-collapse">
            <i class="ace-icon fa fa-angle-double-left" data-icon1="ace-icon fa fa-angle-double-left"
              
data-icon2="ace-icon fa fa-angle-double-right"
></i>
        </div>

        <script type="text/javascript">
            try {
               
ace.settings.check('sidebar', 'collapsed')
            }
catch (e) {
            }
        </
script>
    </div>
    <%-- menu --%>

    <!-- Begin body -->
   
<div class="main-content">
        <div class="main-content-inner">
            <div class="breadcrumbs ace-save-state" id="breadcrumbs">
                <ul class="breadcrumb">
                    <li>
                        <i class="ace-icon fa fa-home home-icon"></i>
                        <a href="#">Trang chủ</a>
                    </li>
                </ul><!-- /.breadcrumb -->
           
</div>
            <div class="page-content">
                <div class="row" >
                    <div class="col-xs-12">

                    </div>
                </div>
            </div>
        </div>
    </div><!-- /.main-content -->
    <!-- End body -->

    <%-- Footer --%>
   
<div class="footer">
        <div class="footer-inner">
            <div class="footer-content">
                  <span class="bigger-120">
                     <span class="blue bolder">laptrinhjavaweb.com</span>
                  </span>
            </div>
        </div>
    </div>

    <a href="#" id="btn-scroll-up" class="btn-scroll-up btn btn-sm btn-inverse">
        <i class="ace-icon fa fa-angle-double-up icon-only bigger-110"></i>
    </a>

</div>

<script src="<c:url value='/template/js/global_javascript.js' />"></script>
<script src="<c:url value='/template/assets/js/ace-extra.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery-ui.custom.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.ui.touch-punch.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.easypiechart.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.sparkline.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.pie.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.resize.min.js' />"></script>
<script src="<c:url value='/template/assets/js/bootstrap.min.js' />"></script>
<script src="<c:url value='/template/assets/js/ace-elements.min.js' />"></script>
<script src="<c:url value='/template/assets/js/ace.min.js' />"></script>
</body>
</html>

5. Trong folder views, tạo file login.jsp và thêm đoạn code phía dưới vô file

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>Trang chủ</title>
    <!-- jquery -->
   
<script type='text/javascript' src='<c:url value="/template/js/2.1.4/jquery.min.js" />'></script>

    <link rel="stylesheet" href="<c:url value='/template/assets/css/bootstrap.min.css' />" />
    <link rel="stylesheet" href="<c:url value='/template/font-awesome/4.5.0/css/font-awesome.min.css' />" />
    <link rel="stylesheet" href="<c:url value='/template/assets/css/ace.min.css' />" class="ace-main-stylesheet" id="main-ace-style" />
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
</head>
<body class="login-layout">
<div class="main-container">
    <div class="main-content">
        <div class="row">
            <div class="col-sm-10 col-sm-offset-1">
                <div class="login-container">
                    <div class="center">
                        <h4 class="blue" id="id-company-text">&copy;Laptrinhjavaweb</h4>
                    </div>

                    <div class="space-6"></div>

                    <div class="position-relative">
                        <div id="login-box" class="login-box visible widget-box no-border">
                            <div class="widget-body">
                                <div class="widget-main">
                                    <h4 class="header blue lighter bigger">
                                        <i class="ace-icon fa fa-coffee green"></i>
                                        Please Enter Your Information
                                    </
h4>

                                    <div class="space-6"></div>

                                    <form>
                                        <fieldset>
                                            <label class="block clearfix">
                                          <span class="block input-icon input-icon-right">
                                             <input type="text" class="form-control" placeholder="Username" />
                                             <i class="ace-icon fa fa-user"></i>
                                          </span>
                                            </label>

                                            <label class="block clearfix">
                                          <span class="block input-icon input-icon-right">
                                             <input type="password" class="form-control" placeholder="Password" />
                                             <i class="ace-icon fa fa-lock"></i>
                                          </span>
                                            </label>

                                            <div class="space"></div>

                                            <div class="space-4"></div>
                                        </fieldset>
                                    </form>

                                    <div class="space-6"></div>

                                </div><!-- /.widget-main -->
                           
</div><!-- /.widget-body -->
                       
</div><!-- /.login-box -->
                   
</div><!-- /.position-relative -->

                
</div>
            </div><!-- /.col -->
       
</div><!-- /.row -->
   
</div><!-- /.main-content -->
</div><!-- /.main-container -->

    <%-- Footer --%>
   
<div class="footer">
        <div class="footer-inner">
            <div class="footer-content">
                  <span class="bigger-120">
                     <span class="blue bolder">laptrinhjavaweb.com</span>
                  </span>
            </div>
        </div>
    </div>

    <a href="#" id="btn-scroll-up" class="btn-scroll-up btn btn-sm btn-inverse">
        <i class="ace-icon fa fa-angle-double-up icon-only bigger-110"></i>
    </a>

</div>

<script src="<c:url value='/template/js/global_javascript.js' />"></script>
<script src="<c:url value='/template/assets/js/ace-extra.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery-ui.custom.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.ui.touch-punch.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.easypiechart.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.sparkline.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.pie.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.resize.min.js' />"></script>
<script src="<c:url value='/template/assets/js/bootstrap.min.js' />"></script>
<script src="<c:url value='/template/assets/js/ace-elements.min.js' />"></script>
<script src="<c:url value='/template/assets/js/ace.min.js' />"></script>
</body>
</html>

Ngày 3: Spring security trong spring boot, spring framework phần 2

- Link project: https://drive.google.com/file/d/1fXByUlDpaYwEE-P8yhTp7mhPyWf5bbdk/view?usp=sharing

 

1. Chỉnh sửa file index.jsp trong thư mục webapp:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:redirect url="/login"/>

2. Sử dụng DBMS MySql:

Tạo schema có tên: 7dayjavamasterv1

Trong file pom.xml, thêm dependency:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.13</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

3. Chỉnh sửa file application.properties trong thư mục resources:

spring.datasource.url = jdbc:mysql://localhost:3306/7dayjavamasterv1
spring.datasource.username = root
spring.datasource.password = 123456
#spring.jpa.hibernate.ddl-auto = none
spring.jpa.hibernate.ddl-auto = create
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL55Dialect
spring.jpa.properties.hibernate.enable_lazy_load_no_trans = true
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

4. Tạo package com.laptrinhjavaweb.entity, thêm class RoleEntity và UserEntity:

Class RoleEntity:

@Entity
@Table(name = "role")
public class RoleEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(nullable = false)
    private String name;
    @Column(unique = true, nullable = false)
    private String code;
    @ManyToMany(mappedBy = "roles", fetch = FetchType.LAZY)
    private List<UserEntity> users = new ArrayList<>();
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public List<UserEntity> getUsers() {
        return users;
    }
    public void setUsers(List<UserEntity> users) {
        this.users = users;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
}

Class UserEntity:

@Entity
@Table(name = "users")
public class UserEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "username", nullable = false, unique = true)
    private String userName;
    @Column(name = "fullname", nullable = false)
    private String fullName;
    @Column(name = "password", nullable = false)
    private String password;
    @Column(name = "status", nullable = false)
    private Integer status;
    @Column(name = "email", unique = true)
    private String email;
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "user_role",
            joinColumns = @JoinColumn(name = "user_id", nullable = false),
            inverseJoinColumns = @JoinColumn(name = "role_id", nullable = false))
    private List<RoleEntity> roles = new ArrayList<>();
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getFullName() {
        return fullName;
    }
    public void setFullName(String fullName) {
        this.fullName = fullName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public List<RoleEntity> getRoles() {
        return roles;
    }
    public void setRoles(List<RoleEntity> roles) {
        this.roles = roles;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
}

5. Run project để tạo database, sau đó cần sửa file application.properties trong thư mục resources:

spring.jpa.hibernate.ddl-auto = none
#spring.jpa.hibernate.ddl-auto = create

6. Insert data cho schema 7dayjavamasterv1:

use 7dayjavamasterv1;
insert into role(code,name) values('ADMIN','Quản trị hệ thống');
insert into role(code,name) values('USER','người dùng');
insert into users(username,password,fullname,status)
values('admin','$2a$10$/RUbuT9KIqk6f8enaTQiLOXzhnUkiwEJRdtzdrMXXwU7dgnLKTCYG','admin',1);
insert into users(username,password,fullname,status)
values('nguyenvana','$2a$10$/RUbuT9KIqk6f8enaTQiLOXzhnUkiwEJRdtzdrMXXwU7dgnLKTCYG','nguyen van a',1);
INSERT INTO user_role(user_id,role_id) VALUES (1,1);
INSERT INTO user_role(user_id,role_id) VALUES (2,2);

7.  Trong file pom.xml, thêm dependency:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>0.7.4</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
    <version>4.2.16.RELEASE</version>
</dependency>

8. Tạo class WebSecurityConfig và class ModelMapperConfig trong packgage config:

Class WebSecurityConfig:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Bean
    public UserDetailsService userDetailsService() {
        return new CustomUserDetailService();
    }
    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
    @Bean
    public DaoAuthenticationProvider authenticationProvider() {
        DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
        authProvider.setUserDetailsService(userDetailsService());
        authProvider.setPasswordEncoder(passwordEncoder());
        return authProvider;
    }
    @Override
    protected void configure(AuthenticationManagerBuilder auth) {
        auth.authenticationProvider(authenticationProvider());
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {
                http.csrf().disable()
                .authorizeRequests()
                        .antMatchers("/user").hasRole("ADMIN")
                        .antMatchers("/trang-chu").hasAnyRole("ADMIN","USER")
                        .antMatchers("/article").hasAnyRole("ADMIN","USER")
                        .antMatchers("/login").permitAll()
                .and()
                .formLogin().loginPage("/login").usernameParameter("j_username")
                .passwordParameter("j_password").permitAll()
                .loginProcessingUrl("/j_spring_security_check")
                .successHandler(myAuthenticationSuccessHandler())
                .failureUrl("/login?incorrectAccount").and()
                .logout().logoutUrl("/logout").deleteCookies("JSESSIONID")
                .and().exceptionHandling().accessDeniedPage("/access-denied").and()
                .sessionManagement().maximumSessions(1).expiredUrl("/login?sessionTimeout");
    }
    @Bean
    public AuthenticationSuccessHandler myAuthenticationSuccessHandler(){
        return new CustomSuccessHandler();
    }
}

Class ModelMapperConfig:

@Configuration
@ComponentScan(basePackages = "com.laptrinhjavaweb")
public class ModelMapperConfig {
    @Bean
    public ModelMapper modelMapper(){
        return new ModelMapper();
    }
}

9. Thêm class RoleDTO, class UserDTO và MyUserDetail trong package dto:

Class RoleDTO:

public class RoleDTO {
   private Long id;
    private String name;
    private String code;
    
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getCode() {
      return code;
   }
   public void setCode(String code) {
      this.code = code;
   }
   public Long getId() {
      return id;
   }
   public void setId(Long id) {
      this.id = id;
   }
}

Class UserDTO:

public class UserDTO {
    private Long id;
    private String userName;
    private String email;
    private String fullName;
    private String password;
    private Integer status;
    private String roleCode;
    private Map<String,String> roleDTOs;
    private List<RoleDTO> roles = new ArrayList<>();
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getFullName() {
        return fullName;
    }
    public void setFullName(String fullName) {
        this.fullName = fullName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public List<RoleDTO> getRoles() {
        return roles;
    }
    public void setRoles(List<RoleDTO> roles) {
        this.roles = roles;
    }
    public Map<String, String> getRoleDTOs() {
        return roleDTOs;
    }
    public void setRoleDTOs(Map<String, String> roleDTOs) {
        this.roleDTOs = roleDTOs;
    }
    public String getRoleCode() {
        return roleCode;
    }
    public void setRoleCode(String roleCode) {
        this.roleCode = roleCode;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
}

Class MyUserDetail:

public class MyUserDetail extends User {
    public MyUserDetail(String username, String password, boolean enabled, boolean accountNonExpired,
        boolean credentialsNonExpired, boolean accountNonLocked,
                Collection<? extends GrantedAuthority> authorities) {
        super(username, password, enabled, accountNonExpired, credentialsNonExpired,
                accountNonLocked, authorities);
    }
    private Long id;
    private String fullName;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getFullName() {
        return fullName;
    }
    public void setFullName(String fullName) {
        this.fullName = fullName;
    }
}

10. Tạo class UserRepository trong package repository:

public interface UserRepository extends JpaRepository<UserEntity, Long> {
    UserEntity findOneByUserNameAndStatus(String name, int status);
}

11. Tạo package service, bên trong package này tạo package impl chứa class CustomUserDetailService và class UserService:

Class CustomUserDetailService:

@Service
public class CustomUserDetailService implements UserDetailsService {
    @Autowired
    private IUserService userService;
    @Override
    public UserDetails loadUserByUsername(String name) throws UsernameNotFoundException {
        UserDTO userDTO = userService.findOneByUserNameAndStatus(name, 1);
        if(userDTO == null){
            throw new UsernameNotFoundException("Username not found");
        }
        List<GrantedAuthority> authorities = new ArrayList<>();
        for(RoleDTO role: userDTO.getRoles()){
            authorities.add(new SimpleGrantedAuthority("ROLE_"+role.getCode()));
        }
        MyUserDetail myUserDetail = new MyUserDetail(name,userDTO.getPassword(),true,true,true,true,authorities);
        BeanUtils.copyProperties(userDTO, myUserDetail);
        return myUserDetail;
    }
}

Class UserService:

@Service
public class UserService implements IUserService {
    @Autowired
    private UserRepository userRepository;
    @Autowired
    private UserConverter userConverter;
    @Override
    public UserDTO findOneByUserNameAndStatus(String name, int status) {
        UserEntity user = userRepository.findOneByUserNameAndStatus(name, status);
        return userConverter.convertToDto(user);
    }
}

Tạo interface IUserService trong package service:

public interface IUserService {
    UserDTO findOneByUserNameAndStatus(String name, int status);
}

12. Tạo class UserConverter trong package converter:

@Component
public class UserConverter {
    @Autowired
    private ModelMapper modelMapper;
    public UserDTO convertToDto (UserEntity entity){
        UserDTO result = modelMapper.map(entity, UserDTO.class);
        return result;
    }
    public UserEntity convertToEntity (UserDTO dto){
        UserEntity result = modelMapper.map(dto, UserEntity.class);
        return result;
    }
}

13. Tạo package security, trong package này tạo package utils chứa class SecurityUtils:

public class SecurityUtils {
    public static MyUserDetail getPrincipal() {
        return (MyUserDetail) (SecurityContextHolder
                .getContext()).getAuthentication().getPrincipal();
    }
    public static List<String> getAuthorities() {
        List<String> results = new ArrayList<>();
        List<GrantedAuthority> authorities = (List<GrantedAuthority>)
        (SecurityContextHolder.getContext().getAuthentication().getAuthorities());
        for (GrantedAuthority authority : authorities) {
            results.add(authority.getAuthority());
        }
        return results;
    }
}

Tạo class CustomSuccessHandler trong package security:

@Component
public class CustomSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {
    private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
            throws IOException {
        String targetUrl = determineTargetUrl(authentication);
        if (response.isCommitted()) {
            System.out.println("Can't redirect");
            return;
        }
        redirectStrategy.sendRedirect(request, response, targetUrl);
    }
    public String determineTargetUrl(Authentication authentication) {
        return "/trang-chu";
    }
    public void setRedirectStrategy(RedirectStrategy redirectStrategy) {
        this.redirectStrategy = redirectStrategy;
    }
    public RedirectStrategy getRedirectStrategy() {
        return redirectStrategy;
    }
}

14. Trong thư mục webapp/WEB-INF/views, thay đổi file home.jsp:

<%@ page import="com.laptrinhjavaweb.security.utils.SecurityUtils" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags"%>
<html>
<head>
    <title>Trang chủ</title>
    <!-- jquery -->
    <script type='text/javascript' src='<c:url value="/template/js/2.1.4/jquery.min.js" />'></script>
    <link rel="stylesheet" href="<c:url value='/template/assets/css/bootstrap.min.css' />" />
    <link rel="stylesheet" href="<c:url value='/template/font-awesome/4.5.0/css/font-awesome.min.css' />" />
    <link rel="stylesheet" href="<c:url value='/template/assets/css/ace.min.css' />"
        class="ace-main-stylesheet" id="main-ace-style" />
    <link rel="stylesheet"
        href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
</head>
<body class="no-skin">
<div class="main-container ace-save-state" id="main-container">
    <script type="text/javascript">
        try{ace.settings.loadState('main-container')}catch(e){}
    </script>
    <%-- menu --%>
    <div id="sidebar" class="sidebar responsive ace-save-state">
        <script type="text/javascript">
            try {
                ace.settings.loadState('sidebar')
            } catch (e) {
            }
        </script>
        <div class="sidebar-shortcuts">
            <div class="sidebar-shortcuts-large">
                <button class="btn btn-success">
                    <i class="ace-icon fa fa-signal"></i>
                </button>
                <button class="btn btn-info">
                    <i class="ace-icon fa fa-pencil"></i>
                </button>
                <button class="btn btn-warning">
                    <i class="ace-icon fa fa-users"></i>
                </button>
                <button class="btn btn-danger">
                    <i class="ace-icon fa fa-cogs"></i>
                </button>
            </div>
            <div class="sidebar-shortcuts-mini">
                <span class="btn btn-success"></span>
                <span class="btn btn-info"></span>
                <span class="btn btn-warning"></span>
                <span class="btn btn-danger"></span>
            </div>
        </div>
        <ul class="nav nav-list">
            <li class="">
                <a href="#" class="dropdown-toggle">
                    <i class="menu-icon fa fa-newspaper-o"></i>
                    <span class="menu-text">Page</span>
                    <b class="arrow fa fa-angle-down"></b>
                </a>
                <b class="arrow"></b>
                <ul class="submenu">
                    <li class="">
                        <a href='<c:url value="/article"/>'>
                            <i class="menu-icon fa fa-caret-right"></i>
                            Page article
                        </a>
                        <b class="arrow"></b>
                    </li>
                </ul>
                <security:authorize access="hasRole('ADMIN')">
                    <ul class="submenu">
                        <li class="">
                            <a href='<c:url value="/user"/>'>
                                <i class="menu-icon fa fa-caret-right"></i>
                                Page user
                            </a>
                            <b class="arrow"></b>
                        </li>
                    </ul>
                </security:authorize>
                <ul class="submenu">
                    <li class="">
                        <a href='<c:url value="/logout"/>'>
                            <i class="menu-icon fa fa-caret-right"></i>
                            Thoát
                        </a>
                        <b class="arrow"></b>
                    </li>
                </ul>
            </li>
        </ul>
        <div class="sidebar-toggle sidebar-collapse" id="sidebar-collapse">
            <i class="ace-icon fa fa-angle-double-left" data-icon1="ace-icon fa fa-angle-double-left"
               data-icon2="ace-icon fa fa-angle-double-right"></i>
        </div>
        <script type="text/javascript">
            try {
                ace.settings.check('sidebar', 'collapsed')
            } catch (e) {
            }
        </script>
    </div>
    <%-- menu --%>
    <!-- Begin body -->
    <div class="main-content">
        <div class="main-content-inner">
            <div class="breadcrumbs ace-save-state" id="breadcrumbs">
                <ul class="breadcrumb">
                    <li>
                        <i class="ace-icon fa fa-home home-icon"></i>
                        <a href="#">Xin chào, <%=SecurityUtils.getPrincipal().getFullName()%> </a>
                    </li>
                </ul><!-- /.breadcrumb -->
            </div>
            <div class="page-content">
                <div class="row" >
                    <div class="col-xs-12">
                    </div>
                </div>
            </div>
        </div>
    </div><!-- /.main-content -->
    <!-- End body -->
    <%-- Footer --%>
    <div class="footer">
        <div class="footer-inner">
            <div class="footer-content">
                  <span class="bigger-120">
                     <span class="blue bolder">laptrinhjavaweb.com</span>
                  </span>
            </div>
        </div>
    </div>
    <a href="#" id="btn-scroll-up" class="btn-scroll-up btn btn-sm btn-inverse">
        <i class="ace-icon fa fa-angle-double-up icon-only bigger-110"></i>
    </a>
</div>
<script src="<c:url value='/template/js/global_javascript.js' />"></script>
<script src="<c:url value='/template/assets/js/ace-extra.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery-ui.custom.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.ui.touch-punch.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.easypiechart.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.sparkline.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.pie.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.resize.min.js' />"></script>
<script src="<c:url value='/template/assets/js/bootstrap.min.js' />"></script>
<script src="<c:url value='/template/assets/js/ace-elements.min.js' />"></script>
<script src="<c:url value='/template/assets/js/ace.min.js' />"></script>
</body>
</html>

Thay đổi file login.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>Trang chủ</title>
    <!-- jquery -->
    <script type='text/javascript' src='<c:url value="/template/js/2.1.4/jquery.min.js" />'></script>
    <link rel="stylesheet" href="<c:url value='/template/assets/css/bootstrap.min.css' />" />
    <link rel="stylesheet" href="<c:url value='/template/font-awesome/4.5.0/css/font-awesome.min.css' />" />
    <link rel="stylesheet" href="<c:url value='/template/assets/css/ace.min.css' />"
        class="ace-main-stylesheet" id="main-ace-style" />
    <link rel="stylesheet"
        href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
</head>
<body class="login-layout">
<div class="main-container">
    <div class="main-content">
        <div class="row">
            <div class="col-sm-10 col-sm-offset-1">
                <div class="login-container">
                    <div class="center">
                        <h4 class="blue" id="id-company-text">&copy;Laptrinhjavaweb</h4>
                    </div>
                    <div class="space-6"></div>
                    <div class="position-relative">
                        <div id="login-box" class="login-box visible widget-box no-border">
                            <div class="widget-body">
                                <div class="widget-main">
                                    <h4 class="header blue lighter bigger">
                                        <i class="ace-icon fa fa-coffee green"></i>
                                        7 ngày học java master V1 miễn phí
                                    </h4>
                                    <c:if test="${param.incorrectAccount != null}">
                                        <div class="alert alert-danger">
                                            Tên đăng nhập hoặc mật khẩu sai!
                                        </div>
                                    </c:if>
                                    <c:if test="${param.accessDenied != null}">
                                        <div class="alert alert-danger">
                                            Bạn không có quyền truy cập!
                                        </div>
                                    </c:if>
                                    <c:if test="${param.sessionTimeout != null}">
                                        <div class="alert alert-danger">
                                            Phiên làm việc hết hạn, yêu cầu đăng nhập lại!
                                        </div>
                                    </c:if>
                                    <div class="space-6"></div>
                                    <form action="j_spring_security_check" method="POST">
                                        <fieldset>
                                            <label class="block clearfix">
                                          <span class="block input-icon input-icon-right">
                                             <input type="text" class="form-control"
                                                 id="username" name="j_username" required />
                                             <i class="ace-icon fa fa-user"></i>
                                          </span>
                                            </label>
                                            <label class="block clearfix">
                                          <span class="block input-icon input-icon-right">
                                             <input type="password" class="form-control"
                                                  id="password" name="j_password" required />
                                             <i class="ace-icon fa fa-lock"></i>
                                          </span>
                                            </label>
                                            <div class="space"></div>
                                            <div class="space-4"></div>
                                            <div class="clearfix">
                                                <button type="submit" class="width-65 pull-right
                                                      btn btn-sm btn-success">
                                                    <span class="bigger-110">Đăng nhập</span>
                                                    <i class="ace-icon fa fa-arrow-right icon-on-right"></i>
                                                </button>
                                            </div>
                                        </fieldset>
                                    </form>
                                    <div class="space-6"></div>
                                </div><!-- /.widget-main -->
                            </div><!-- /.widget-body -->
                        </div><!-- /.login-box -->
                    </div><!-- /.position-relative -->
                </div>
            </div><!-- /.col -->
        </div><!-- /.row -->
    </div><!-- /.main-content -->
</div><!-- /.main-container -->
<%-- Footer --%>
<div class="footer">
    <div class="footer-inner">
        <div class="footer-content">
                  <span class="bigger-120">
                     <span class="blue bolder">laptrinhjavaweb.com</span>
                  </span>
        </div>
    </div>
</div>
<a href="#" id="btn-scroll-up" class="btn-scroll-up btn btn-sm btn-inverse">
    <i class="ace-icon fa fa-angle-double-up icon-only bigger-110"></i>
</a>
</div>
<script src="<c:url value='/template/js/global_javascript.js' />"></script>
<script src="<c:url value='/template/assets/js/ace-extra.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery-ui.custom.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.ui.touch-punch.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.easypiechart.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.sparkline.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.pie.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.resize.min.js' />"></script>
<script src="<c:url value='/template/assets/js/bootstrap.min.js' />"></script>
<script src="<c:url value='/template/assets/js/ace-elements.min.js' />"></script>
<script src="<c:url value='/template/assets/js/ace.min.js' />"></script>
</body>
</html>

Thêm file article.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>Trang chủ</title>
    <!-- jquery -->
    <script type='text/javascript' src='<c:url value="/template/js/2.1.4/jquery.min.js" />'></script>
    <link rel="stylesheet" href="<c:url value='/template/assets/css/bootstrap.min.css' />" />
    <link rel="stylesheet" href="<c:url value='/template/font-awesome/4.5.0/css/font-awesome.min.css' />" />
    <link rel="stylesheet" href="<c:url value='/template/assets/css/ace.min.css' />"
        class="ace-main-stylesheet" id="main-ace-style" />
    <link rel="stylesheet"
        href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
</head>
<body class="no-skin">
<div class="main-container ace-save-state" id="main-container">
    <script type="text/javascript">
        try{ace.settings.loadState('main-container')}catch(e){}
    </script>
    <%-- menu --%>
    <div id="sidebar" class="sidebar responsive ace-save-state">
        <script type="text/javascript">
            try {
                ace.settings.loadState('sidebar')
            } catch (e) {
            }
        </script>
        <div class="sidebar-shortcuts">
            <div class="sidebar-shortcuts-large">
                <button class="btn btn-success">
                    <i class="ace-icon fa fa-signal"></i>
                </button>
                <button class="btn btn-info">
                    <i class="ace-icon fa fa-pencil"></i>
                </button>
                <button class="btn btn-warning">
                    <i class="ace-icon fa fa-users"></i>
                </button>
                <button class="btn btn-danger">
                    <i class="ace-icon fa fa-cogs"></i>
                </button>
            </div>
            <div class="sidebar-shortcuts-mini">
                <span class="btn btn-success"></span>
                <span class="btn btn-info"></span>
                <span class="btn btn-warning"></span>
                <span class="btn btn-danger"></span>
            </div>
        </div>
        <ul class="nav nav-list">
            <li class="">
                <a href="#" class="dropdown-toggle">
                    <i class="menu-icon fa fa-newspaper-o"></i>
                    <span class="menu-text">Dashboard</span>
                    <b class="arrow fa fa-angle-down"></b>
                </a>
                <b class="arrow"></b>
                <ul class="submenu">
                    <li class="">
                        <a href='<c:url value="/trang-chu"/>'>
                            <i class="menu-icon fa fa-caret-right"></i>
                            Trang chủ
                        </a>
                        <b class="arrow"></b>
                    </li>
                </ul>
                <ul class="submenu">
                    <li class="">
                        <a href='<c:url value="/logout"/>'>
                            <i class="menu-icon fa fa-caret-right"></i>
                            Thoát
                        </a>
                        <b class="arrow"></b>
                    </li>
                </ul>
            </li>
        </ul>
        <div class="sidebar-toggle sidebar-collapse" id="sidebar-collapse">
            <i class="ace-icon fa fa-angle-double-left" data-icon1="ace-icon fa fa-angle-double-left"
               data-icon2="ace-icon fa fa-angle-double-right"></i>
        </div>
        <script type="text/javascript">
            try {
                ace.settings.check('sidebar', 'collapsed')
            } catch (e) {
            }
        </script>
    </div>
    <%-- menu --%>
    <!-- Begin body -->
    <div class="main-content">
        <div class="main-content-inner">
            <div class="breadcrumbs ace-save-state" id="breadcrumbs">
                <ul class="breadcrumb">
                    <li>
                        <i class="ace-icon fa fa-home home-icon"></i>
                        <a href="#">Quản lý bài viết</a>
                    </li>
                </ul><!-- /.breadcrumb -->
            </div>
            <div class="page-content">
                <div class="row" >
                    <div class="col-xs-12">
                    </div>
                </div>
            </div>
        </div>
    </div><!-- /.main-content -->
    <!-- End body -->
    <%-- Footer --%>
    <div class="footer">
        <div class="footer-inner">
            <div class="footer-content">
                  <span class="bigger-120">
                     <span class="blue bolder">laptrinhjavaweb.com</span>
                  </span>
            </div>
        </div>
    </div>
    <a href="#" id="btn-scroll-up" class="btn-scroll-up btn btn-sm btn-inverse">
        <i class="ace-icon fa fa-angle-double-up icon-only bigger-110"></i>
    </a>
</div>
<script src="<c:url value='/template/js/global_javascript.js' />"></script>
<script src="<c:url value='/template/assets/js/ace-extra.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery-ui.custom.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.ui.touch-punch.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.easypiechart.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.sparkline.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.pie.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.resize.min.js' />"></script>
<script src="<c:url value='/template/assets/js/bootstrap.min.js' />"></script>
<script src="<c:url value='/template/assets/js/ace-elements.min.js' />"></script>
<script src="<c:url value='/template/assets/js/ace.min.js' />"></script>
</body>
</html>

Thêm file user.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>Trang chủ</title>
    <!-- jquery -->
    <script type='text/javascript' src='<c:url value="/template/js/2.1.4/jquery.min.js" />'></script>
    <link rel="stylesheet" href="<c:url value='/template/assets/css/bootstrap.min.css' />" />
    <link rel="stylesheet" href="<c:url value='/template/font-awesome/4.5.0/css/font-awesome.min.css' />" />
    <link rel="stylesheet" href="<c:url value='/template/assets/css/ace.min.css' />"
        class="ace-main-stylesheet" id="main-ace-style" />
    <link rel="stylesheet"
        href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
</head>
<body class="no-skin">
<div class="main-container ace-save-state" id="main-container">
    <script type="text/javascript">
        try{ace.settings.loadState('main-container')}catch(e){}
    </script>
    <%-- menu --%>
    <div id="sidebar" class="sidebar responsive ace-save-state">
        <script type="text/javascript">
            try {
                ace.settings.loadState('sidebar')
            } catch (e) {
            }
        </script>
        <div class="sidebar-shortcuts">
            <div class="sidebar-shortcuts-large">
                <button class="btn btn-success">
                    <i class="ace-icon fa fa-signal"></i>
                </button>
                <button class="btn btn-info">
                    <i class="ace-icon fa fa-pencil"></i>
                </button>
                <button class="btn btn-warning">
                    <i class="ace-icon fa fa-users"></i>
                </button>
                <button class="btn btn-danger">
                    <i class="ace-icon fa fa-cogs"></i>
                </button>
            </div>
            <div class="sidebar-shortcuts-mini">
                <span class="btn btn-success"></span>
                <span class="btn btn-info"></span>
                <span class="btn btn-warning"></span>
                <span class="btn btn-danger"></span>
            </div>
        </div>
        <ul class="nav nav-list">
            <li class="">
                <a href="#" class="dropdown-toggle">
                    <i class="menu-icon fa fa-newspaper-o"></i>
                    <span class="menu-text">Dashboard</span>
                    <b class="arrow fa fa-angle-down"></b>
                </a>
                <b class="arrow"></b>
                <ul class="submenu">
                    <li class="">
                        <a href='<c:url value="/trang-chu"/>'>
                            <i class="menu-icon fa fa-caret-right"></i>
                            Trang chủ
                        </a>
                        <b class="arrow"></b>
                    </li>
                </ul>
                <ul class="submenu">
                    <li class="">
                        <a href='<c:url value="/logout"/>'>
                            <i class="menu-icon fa fa-caret-right"></i>
                            Thoát
                        </a>
                        <b class="arrow"></b>
                    </li>
                </ul>
            </li>
        </ul>
        <div class="sidebar-toggle sidebar-collapse" id="sidebar-collapse">
            <i class="ace-icon fa fa-angle-double-left" data-icon1="ace-icon fa fa-angle-double-left"
               data-icon2="ace-icon fa fa-angle-double-right"></i>
        </div>
        <script type="text/javascript">
            try {
                ace.settings.check('sidebar', 'collapsed')
            } catch (e) {
            }
        </script>
    </div>
    <%-- menu --%>
    <!-- Begin body -->
    <div class="main-content">
        <div class="main-content-inner">
            <div class="breadcrumbs ace-save-state" id="breadcrumbs">
                <ul class="breadcrumb">
                    <li>
                        <i class="ace-icon fa fa-home home-icon"></i>
                        <a href="#">Quản lý tài khoản</a>
                    </li>
                </ul><!-- /.breadcrumb -->
            </div>
            <div class="page-content">
                <div class="row" >
                    <div class="col-xs-12">
                    </div>
                </div>
            </div>
        </div>
    </div><!-- /.main-content -->
    <!-- End body -->
    <%-- Footer --%>
    <div class="footer">
        <div class="footer-inner">
            <div class="footer-content">
                  <span class="bigger-120">
                     <span class="blue bolder">laptrinhjavaweb.com</span>
                  </span>
            </div>
        </div>
    </div>
    <a href="#" id="btn-scroll-up" class="btn-scroll-up btn btn-sm btn-inverse">
        <i class="ace-icon fa fa-angle-double-up icon-only bigger-110"></i>
    </a>
</div>
<script src="<c:url value='/template/js/global_javascript.js' />"></script>
<script src="<c:url value='/template/assets/js/ace-extra.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery-ui.custom.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.ui.touch-punch.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.easypiechart.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.sparkline.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.pie.min.js' />"></script>
<script src="<c:url value='/template/assets/js/jquery.flot.resize.min.js' />"></script>
<script src="<c:url value='/template/assets/js/bootstrap.min.js' />"></script>
<script src="<c:url value='/template/assets/js/ace-elements.min.js' />"></script>
<script src="<c:url value='/template/assets/js/ace.min.js' />"></script>
</body>
</html>

 

15. Trong file HomeController thêm các method sau:

@RequestMapping(value = "/article", method = RequestMethod.GET)
public ModelAndView articlePage() {
   ModelAndView mav = new ModelAndView("article");
   return mav;
}
@RequestMapping(value = "/user", method = RequestMethod.GET)
public ModelAndView userPage() {
   ModelAndView mav = new ModelAndView("user");
   return mav;
}
@RequestMapping(value = "/access-denied", method = RequestMethod.GET)
public ModelAndView accessDenied() {
   return new ModelAndView("redirect:/login?accessDenied");
}
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public ModelAndView logout(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
   Authentication auth = SecurityContextHolder.getContext().getAuthentication();
   if (auth != null) {
      new SecurityContextLogoutHandler().logout(request, response, auth);
   }
   return new ModelAndView("redirect:/login");
}

Ngày 4: Spring security trong spring boot, spring framework phần 3

Phần này giải thích các nội dung trong ngày 3, các bạn xem kỹ nội dung video sau buổi học để ôn tập

Ngày 5: Triển khai project lên java hosting

5.1 Mua hosting tại laptrinhjavawebsoftware

Chi tiết: http://laptrinhjavawebsoftware.com/java-hosting.html

Chú ý: bên "Laptrinhjavaweb Software" có tặng mã giảm 100.000 VNĐ cho các bạn tham gia chương trình, các bạn liên hệ để lấy mã giảm giá nhé

Sau khi mua java hosting xong, bạn có 2 lựa chọn

1. Nhờ kỹ thuật bên "Laptrinhjavaweb Software" xử lý hết luôn bao gồm: đưa code lên hosting và database

2. Tự làm để luôn chủ động trong mọi tình huống (xem chi tiết bên dưới nhé)

Đối với thao tác triển khai code lên hosting

5.2 Sau khi được cung cấp các thông tin cần thiết thì đăng nhập vào trang [tên miền]/manager/html để upload website

Lưu ý: đổi tên file WAR thành ROOT.war

5.3 Nếu đã từng upload rồi thì xóa phải cũ để upload file mới

Chọn Undeploy

5.4 Sau đó upload file mới

Chọn file ROOT.war và nhấn Deploy

Đối với thao tác triển khai database lên hosting

1. Sau khi được cung cấp các thông tin như: IP, port, username, password thì các bạn mở mysql dưới máy rồi thiết lập kết nối tới mysql trên hosting theo các thông tin được cung cấp

2. Sau khi thiêt lập kết nối tới mysql trên hosting thành công thì các bạn làm các bước giống như các bạn làm dưới local để có được database mong muốn

Ngày 6: Lộ trình học java backend kiếm hàng chục triệu VNĐ mỗi tháng

Tài tiệu sử dụng trong ngày học: HỌC LẬP TRÌNH JAVA

Ngày 7: Đi làm tại công ty làm thế nào để thăng tiến và tăng thu nhập

- Tài liệu 1: https://laptrinhjavaweb.com/java-developer-2-nam-kinh-nghiem-nen-hoc-gi-134

- Tài liệu 2: https://laptrinhjavaweb.com/lo-trinh-hoc-java-web-phan-3-40

- Tài liệu 3: https://youtu.be/-i-uvCk2Ej0

Học spring framework cơ bản miễn phí

- Viết api web service trong spring framework: HỌC SPRING BOOT

- Thiết kế website trong spring framework: HỌC SPRING MVC

Nhận Ebook phỏng vấn lập trình
Java và Spring Framework

Hy vọng tài liệu phỏng vấn này sẽ giúp cho anh/chị/em tốt hơn trong quá trình phỏng vấn

Đăng ký nhận ebook ngay
phone zalo zalo