Spring Security 4 基于角色的登录例子(带源码)

一般来说,我们需要自定义一个Success-Handler 来根据用户角色处理登录用户的重定向到对应的url。

这个功能在Spring Security 里面已经提供了。

SimpleUrlAuthenticationSuccessHandler 含有常用的successhandler的常用逻辑。

我们仅需要拓展它,实现我们自己的逻辑即可。

一旦我们获得了successhandler(处理器),我们将通过formLogin()或loginPage()来注册它,

完整的例子如下:

--------------------------------------------------------

下面是用的技术

 

Dear  ${user} , Welcome to Home Page.  Dear ${user}, Welcome to Admin Page.  Dear ${user}, Welcome to DBA Page.  Dear ${user}, You are not authorized to access this page
  • Spring 4.1.6.RELEASE
  • Spring Security 4.0.1.RELEASE
  • Maven 3
  • JDK 1.7
  • Tomcat 8.0.21
  • Eclipse JUNO Service Release 2

 

让我们开始吧

 

第1步: 项目文件目录结构
下面是最终的项目目录结构
\


现在让我为你展示上面目录结构里面的内容和每个的详细介绍。

第2步: 更新 pom.xml 包含所需的依赖
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
   <modelversion> 4.0 . 0 </modelversion>
  
   <groupid>com.websystique.springsecurity</groupid>
   SpringSecurityRoleBasedLoginExample</artifactid>
   <version> 1.0 . 0 </version>
   <packaging>war</packaging>
  
   <name>SpringSecurityRoleBasedLoginExample</name>
  
     <properties>
         <springframework.version> 4.1 . 6 .RELEASE</springframework.version>
         <springsecurity.version> 4.0 . 1 .RELEASE</springsecurity.version>
     </properties>
  
     <dependencies>
         <!-- Spring -->
         <dependency>
             <groupid>org.springframework</groupid>
             spring-core</artifactid>
             <version>${springframework.version}</version>
         </dependency>
         <dependency>
             <groupid>org.springframework</groupid>
             spring-web</artifactid>
             <version>${springframework.version}</version>
         </dependency>
         <dependency>
             <groupid>org.springframework</groupid>
             spring-webmvc</artifactid>
             <version>${springframework.version}</version>
         </dependency>
  
         <!-- Spring Security -->
         <dependency>
             <groupid>org.springframework.security</groupid>
             spring-security-web</artifactid>
             <version>${springsecurity.version}</version>
         </dependency>
         <dependency>
             <groupid>org.springframework.security</groupid>
             spring-security-config</artifactid>
             <version>${springsecurity.version}</version>
         </dependency>
  
         <dependency>
             <groupid>javax.servlet</groupid>
             javax.servlet-api</artifactid>
             <version> 3.1 . 0 </version>
         </dependency>
         <dependency>
             <groupid>javax.servlet.jsp</groupid>
             javax.servlet.jsp-api</artifactid>
             <version> 2.3 . 1 </version>
         </dependency>
         <dependency>
             <groupid>javax.servlet</groupid>
             jstl</artifactid>
             <version> 1.2 </version>
         </dependency>
     </dependencies>
  
     <build>
         <pluginmanagement>
             <plugins>
                 <plugin>
                     <groupid>org.apache.maven.plugins</groupid>
                     maven-compiler-plugin</artifactid>
                     <version> 3.2 </version>
                     <configuration>
                         <source> 1.7
                         <target> 1.7 </target>
                     </configuration><source><source><source><source>
                 </plugin><source><source><source><source><source><source><source><source><source><source>
                 <plugin>
                     <groupid>org.apache.maven.plugins</groupid>
                     maven-war-plugin</artifactid>
                     <version> 2.4 </version>
                     <configuration>
                         <warsourcedirectory>src/main/webapp</warsourcedirectory>
                         <warname>SpringSecurityRoleBasedLoginExample</warname>
                         <failonmissingwebxml> false </failonmissingwebxml>
                     </configuration>
                 </plugin>
             </plugins><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source>
         </pluginmanagement><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source>
         <finalname>SpringSecurityRoleBasedLoginExample</finalname>
     </build><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source>
</project>
第3步: 添加 Spring Security 配置类

添加spring security到我们应用中第一步是要创建Spring Security Java 配置类。

这个配置创建一个叫springSecurityFilterChain的Servlet过滤器,来对我们应用中所有的安全相关的事项(保护应用的所有url,验证用户名密码,表单重定向等)负责。

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.websystique.springsecurity.configuration;
  
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
  
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
  
     @Autowired
     CustomSuccessHandler customSuccessHandler;
  
     @Autowired
     public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
         auth.inMemoryAuthentication().withUser( "bill" ).password( "abc123" ).roles( "USER" );
         auth.inMemoryAuthentication().withUser( "admin" ).password( "root123" ).roles( "ADMIN" );
         auth.inMemoryAuthentication().withUser( "dba" ).password( "root123" ).roles( "ADMIN" , "DBA" );
     }
  
     @Override
     protected void configure(HttpSecurity http) throws Exception {
       http.authorizeRequests()
         .antMatchers( "/" , "/home" ).access( "hasRole('USER')" )
         .antMatchers( "/admin/**" ).access( "hasRole('ADMIN')" )
         .antMatchers( "/db/**" ).access( "hasRole('ADMIN') and hasRole('DBA')" )
         .and().formLogin().loginPage( "/login" ).successHandler(customSuccessHandler)
         .usernameParameter( "ssoId" ).passwordParameter( "password" )
         .and().csrf()
         .and().exceptionHandling().accessDeniedPage( "/Access_Denied" );
     }
  
}

此类和前几篇文章类似,只是下面这点有区别:formLogin().loginPage("/login").successHandler(customSuccessHandler)

 

重点是successHandler,这个类定义了处理successHandler的逻辑。在本例中根据 角色USER/ADMIN/DBA重定向到home/admin/db

以上配置 对应的xml配置文件:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
     http: //www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.0.xsd"><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source>
       
     <http auto-config= "true" >
         <intercept-url access= "hasRole('USER')" pattern= "/" >
         <intercept-url access= "hasRole('USER')" pattern= "/home" >
         <intercept-url access= "hasRole('ADMIN')" pattern= "/admin**" >
         <intercept-url access= "hasRole('ADMIN') and hasRole('DBA')" pattern= "/dba**" >
         <form-login authentication-failure-url= "/Access_Denied" authentication-success-handler-ref= "customSuccessHandler" login-page= "/login" password-parameter= "password" username-parameter= "ssoId" >
         <csrf>
     </csrf></form-login></intercept-url></intercept-url></intercept-url></intercept-url></http>
   
     
         
             <user-service>
                 <user authorities= "ROLE_USER" name= "bill" password= "abc123" >
                 <user authorities= "ROLE_ADMIN" name= "admin" password= "root123" >
                 <user authorities= "ROLE_ADMIN,ROLE_DBA" name= "dba" password= "root123" >
             </user></user></user></user-service>
         </authentication-provider>
     </authentication-manager>
       
     <beans:bean class = "com.websystique.springsecurity.configuration.CustomSuccessHandler" id= "customSuccessHandler" >
      
</beans:bean></beans:beans>

下面是 上面的类里面涉及的Success-Handler

 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package com.websystique.springsecurity.configuration;
  
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
  
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.web.DefaultRedirectStrategy;
import org.springframework.security.web.RedirectStrategy;
import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;
import org.springframework.stereotype.Component;
  
@Component
public class CustomSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {
  
     private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
  
     @Override
     protected 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);
     }
  
     /*
      * This method extracts the roles of currently logged-in user and returns
      * appropriate URL according to his/her role.
      */
     protected String determineTargetUrl(Authentication authentication) {
         String url = "" ;
  
         Collection<!--? extends GrantedAuthority--> authorities = authentication.getAuthorities();
  
         List<string><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source> roles = new ArrayList<string>();
  
         for (GrantedAuthority a : authorities) {
             roles.add(a.getAuthority());
         }
  
         if (isDba(roles)) {
             url = "/db" ;
         } else if (isAdmin(roles)) {
             url = "/admin" ;
         } else if (isUser(roles)) {
             url = "/home" ;
         } else {
             url = "/accessDenied" ;
         }
  
         return url;
     }
  
     private boolean isUser(List<string> roles) {
         if (roles.contains( "ROLE_USER" )) {
             return true ;
         }
         return false ;
     }
  
     private boolean isAdmin(List<string> roles) {
         if (roles.contains( "ROLE_ADMIN" )) {
             return true ;
         }
         return false ;
     }
  
     private boolean isDba(List<string> roles) {
         if (roles.contains( "ROLE_DBA" )) {
             return true ;
         }
         return false ;
     }
  
     public void setRedirectStrategy(RedirectStrategy redirectStrategy) {
         this .redirectStrategy = redirectStrategy;
     }
  
     protected RedirectStrategy getRedirectStrategy() {
         return redirectStrategy;
     }
  
}</string></string></string></string></string>

注意:我们是怎样拓展SimpleUrlAuthenticationSuccessHandler类的,重写了handle()方法,

 

简单的调用重定向使用配置的RedirectStrategy,其中通过determineTargetUrl方法返回对应的url。

此方法从Authentication 对象中提取角色然后根据 角色构建 对应的url.最后在Spring Security 负责所有重定向事务的RedirectStrategy (重定向策略)来重定向请求到指定的url

其余部分和以前的文章是一样的。

 

第4步: 注册springSecurityFilter
下面是定制初始化war包中的springSecurityFilter(第三步中的)注册类
?
1
2
3
4
5
6
7
package com.websystique.springsecurity.configuration;
  
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
  
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
  
}

上面配置对应的xml配置如下:

 

 

?
1
2
3
4
5
6
7
8
9
<filter><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source>
     <filter-name>springSecurityFilterChain</filter-name>
     <filter- class >org.springframework.web.filter.DelegatingFilterProxy</filter- class >
</filter>
  
<filter-mapping><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source><source>
     <filter-name>springSecurityFilterChain</filter-name>
     <url-pattern>/*</url-pattern>
</filter-mapping>

 

第5步: 添加 Controller(控制器)

 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package com.websystique.springsecurity.controller;
  
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
  
@Controller
public class HelloWorldController {
  
      
     @RequestMapping (value = { "/" , "/home" }, method = RequestMethod.GET)
     public String homePage(ModelMap model) {
         model.addAttribute( "user" , getPrincipal());
         return "welcome" ;
     }
  
     @RequestMapping (value = "/admin" , method = RequestMethod.GET)
     public String adminPage(ModelMap model) {
         model.addAttribute( "user" , getPrincipal());
         return "admin" ;
     }
      
     @RequestMapping (value = "/db" , method = RequestMethod.GET)
     public String dbaPage(ModelMap model) {
         model.addAttribute( "user" , getPrincipal());
         return "dba" ;
     }
  
     @RequestMapping (value = "/Access_Denied" , method = RequestMethod.GET)
     public String accessDeniedPage(ModelMap model) {
         model.addAttribute( "user" , getPrincipal());
         return "accessDenied" ;
     }
  
     @RequestMapping (value = "/login" , method = RequestMethod.GET)
     public String loginPage() {
         return "login" ;
     }
  
     @RequestMapping (value= "/logout" , method = RequestMethod.GET)
     public String logoutPage (HttpServletRequest request, HttpServletResponse response) {
         Authentication auth = SecurityContextHolder.getContext().getAuthentication();
         if (auth != null ){   
             new SecurityContextLogoutHandler().logout(request, response, auth);
         }
         return "redirect:/login?logout" ;
     }
  
     private String getPrincipal(){
         String userName = null ;
         Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
  
         if (principal instanceof UserDetails) {
             userName = ((UserDetails)principal).getUsername();
         } else {
             userName = principal.toString();
         }
         return userName;
     }
  
}

 

第6步: 添加 SpringMVC 配置类

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.websystique.springsecurity.configuration;
  
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.JstlView;
  
@Configuration
@EnableWebMvc
@ComponentScan (basePackages = "com.websystique.springsecurity" )
public class HelloWorldConfiguration extends WebMvcConfigurerAdapter{
      
     @Bean
     public ViewResolver viewResolver() {
         InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
         viewResolver.setViewClass(JstlView. class );
         viewResolver.setPrefix( "/WEB-INF/views/" );
         viewResolver.setSuffix( ".jsp" );
  
         return viewResolver;
     }
  
      /*
      * Configure ResourceHandlers to serve static resources like CSS/ Javascript etc...
      */
     @Override
     public void addResourceHandlers(ResourceHandlerRegistry registry) {
         registry.addResourceHandler( "/static/**" ).addResourceLocations( "/static/" );
     }
}

---------译者增加 start---明明如月--------
以上配置对应的xml配置如下:
?
1
2
3
4
5
6
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    <mvc:resources --= "" .jsp= "" by= "" controllers= "" directory= "" font-family:= "" for = "" in= "" location= "<span style=" mapping= "<span style=" open= "" rendering= "" resolves= "" resources= "" selected= "selected" the= "" to= "" views= "" ><source>
    <beans:bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <beans:property name= "prefix" value= "/WEB-INF/views/" >
        <beans:property name= "suffix" value= ".jsp" >
    </beans:property></beans:property></beans:bean></mvc:resources>
---------译者增加end---明明如月--------
第7: 添加Initializer(初始化器)类
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.websystique.springsecurity.configuration;
  
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
  
public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
  
     @Override
     protected Class<!--?-->[] getRootConfigClasses() {
         return new Class[] { HelloWorldConfiguration. class };
     }
   
     @Override
     protected Class<!--?-->[] getServletConfigClasses() {
         return null ;
     }
   
     @Override
     protected String[] getServletMappings() {
         return new String[] { "/" };
     }
  
}

第8步: 添加视图
login.jsp
此视图为登录面板增加了css
?
1
2
<%@ page language= "java" contentType= "text/html; charset=ISO-8859-1" pageEncoding= "ISO-8859-1" %>
<%@ taglib prefix= "c" uri= "http://java.sun.com/jsp/jstl/core" %>
     注意:和CSRF 相关的是
?
1
 
这一行的目的是防止CSRF攻击。正如你所见jsp中CSRF参数使用EL表达式获取的。因此需要允许el表达式:
需要在jsp头添加如下一行:
?
1
<%@ page isELIgnored= "false" %>
  welcome.jsp
?
1
2
<%@ page language= "java" contentType= "text/html; charset=ISO-8859-1" pageEncoding= "ISO-8859-1" %>
<%@ taglib prefix= "c" uri= "http://java.sun.com/jsp/jstl/core" %>

admin.jsp
?
1
2
<%@ page language= "java" contentType= "text/html; charset=ISO-8859-1" pageEncoding= "ISO-8859-1" %>
<%@ taglib prefix= "c" uri= "http://java.sun.com/jsp/jstl/core" %>

dba.jsp
?
1
2
<%@ page language= "java" contentType= "text/html; charset=ISO-8859-1" pageEncoding= "ISO-8859-1" %>
<%@ taglib prefix= "c" uri= "http://java.sun.com/jsp/jstl/core" %>

accessDenied.jsp

 

 

?
1
2
<%@ page language= "java" contentType= "text/html; charset=ISO-8859-1" pageEncoding= "ISO-8859-1" %>
<%@ taglib prefix= "c" uri= "http://java.sun.com/jsp/jstl/core" %>

 

例子中所需的css文件

app.css

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
html{
     background-color:#2F2F2F;
}
  
body, #mainWrapper {
     height: 100 %;
     background-image: -webkit-gradient(
     linear,
     right bottom,
     right top,
     color-stop( 0 , #EDEDED),
     color-stop( 0.08 , #EAEAEA),
     color-stop( 1 , #2F2F2F),
     color-stop( 1 , #AAAAAA)
);
background-image: -o-linear-gradient(top, #EDEDED 0 %, #EAEAEA 8 %, #2F2F2F 100 %, #AAAAAA 100 %);
background-image: -moz-linear-gradient(top, #EDEDED 0 %, #EAEAEA 8 %, #2F2F2F 100 %, #AAAAAA 100 %);
background-image: -webkit-linear-gradient(top, #EDEDED 0 %, #EAEAEA 8 %, #2F2F2F 100 %, #AAAAAA 100 %);
background-image: -ms-linear-gradient(top, #EDEDED 0 %, #EAEAEA 8 %, #2F2F2F 100 %, #AAAAAA 100 %);
background-image: linear-gradient(to top, #EDEDED 0 %, #EAEAEA 8 %, #2F2F2F 100 %, #AAAAAA 100 %);
}
  
body, #mainWrapper, .form-control{
     font-size:12px!important;
}
  
#mainWrapper {
     height: 100vh;
     padding-left:10px;
     padding-right:10px;
     padding-bottom:10px;
}
  
#authHeaderWrapper{
     clear:both;
     width: 100 %;
     height: 3 %;
     padding-top:5px;
     padding-bottom:5px;
}
  
.login-container {
     margin-top: 100px;
     background-color: floralwhite;
     width: 40 %;
     left: 30 %;
     position: absolute;
}
  
.login-card {
     width: 80 %;
     margin: auto;
}
.login-form {
     padding: 10 %;
}


 

第9步: 构建和部署应用
现在构建 war 包(通过eclipse或者myeclipse)或者通过maven 命令行( mvn clean install). 在一个Servlet 3.0 容器中发布本应用. 在这里我使用的是tomcat, 我将war 文件放到 tomcat webapps 文件夹然后点击tomcat安装目录的bin文件夹下的 start.bat. 启动应用
打开 浏览器  在地址栏输入localhost:8080/SpringSecurityRoleBasedLoginExample/并回车

 

\

输入DBA角色的账户

\

提交表单,因为当前登录的用户时DBA角色,登录后将被重定向到/db 页面。

\

退出后登录USER权限的用户

\

\

 

然后访问admin 页面,将看到 权限拒绝页面

\

退出后登录ADMIN 角色的账户

\

本文结束,下一篇文章我们精介绍基于Hibernate注解的数据库的Spring Security 权限验证。

项目下载地址:http://websystique.com/?smd_process_download=1&download_id=1495


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值