很久以前用过spring security , 那个时候还是 2.0 版本的, 而且当时是项目组的另外的成员负责权限设计这一块,我只是皮毛了解一些 (只知道可以通过xml配置实现权限控制,实现资源与用户角色之间的关系配置,通过一连串的filter 来实现整个认证和授权过程)。一直没有系统的学习下 spring security ,现在有机会了,不过 spring security 变成了3.0 以上的版本了, 基础的知识以及介绍,官方也有详细的文档。就一步一步按照文档试验吧,做一个简单的基于xml配置的认证.
整个程序还是采用 spring mvc 架构, 结合spring security 实现一个简单的用户登录认证. 项目所需要用到的jar包如下,有可能有多的:
既然要做登录认证,就需要一个登录页面,我采用了jstl.
程序代码
代码如下 | 复制代码 |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <head> <title>Login Page</title> <style> .errorblock { color: #ff0000; background-color: #ffEEEE; border: 3px solid #ff0000; padding: 8px; margin: 16px; } </style> </head> <body onload='document.f.j_username.focus();'> <h3>自定义页面登录</h3> <c:if test="${not empty error}"> <form name='f' action="${pageContext.request.contextPath}/j_spring_security_check" method='POST'> <table> </form>
|
需要注意的是在html 表单中的如下东西:
j_spring_security_check – 登录请求的url
j_spring_security_logout – 登出的url
j_username – 用户名
j_password – 密码
配置 spring security 的 配置文件
程序代码
代码如下 | 复制代码 |
<http auto-config="true"> <intercept-url pattern="/app/welcome*" access="ROLE_USER" /> <form-login login-page="/app/login" default-target-url="/app/welcome" authentication-failure-url="/app/loginfailed" /> <logout logout-success-url="/app/logout" /> </http> <authentication-manager> |
login-page=”/app/login” – 定义登录页面地址
default-target-url=”/app/welcome” – 如果认证成功,则forward到/app/welcome页面
authentication-failure-url=”/loginfailed” – 如果认证失败,则跳转到 /app/loginfailed 页面
logout-success-url=”/logout” – 退出登录,跳转到 /app/logout 页面.
注意,这里的地址url 全部是采用 spring mvc rest 风格定义的,具体的定义在controller 中实现, 代码如下:
程序代码
代码如下 | 复制代码 |
package com.yihaomen.common.controller; import java.security.Principal; import org.springframework.stereotype.Controller; @Controller @RequestMapping(value="/welcome", method = RequestMethod.GET) String name = principal.getName(); @RequestMapping(value="/login", method = RequestMethod.GET)
|
定义错误消息 mymessages.properties
程序代码
AbstractUserDetailsAuthenticationProvider.badCredentials=u9519u8BEFu7684u7528u6237u540Du6216u5BC6u7801
如果登录失败,将会在界面上显示这个消息: "错误的用户名或密码 "
spring security 在 web.xml中的配置
程序代码
代码如下 | 复制代码 |
<!-- Spring MVC --> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/app/*</url-pattern> </servlet-mapping> <listener> <context-param> <!-- Spring Security --> <filter-mapping> |
整个程序结构如下:
运行程序,如果输入正确的用户名和密码:
如果输入的密码错误,则会出现如下错误提示
由此,一个简单的spring security 的登录认证就实现了,整个源代码下载,除去了jar包,自己添加:
源码下载地址:http://file.111cn.net/download/2013/12/a36.zip