spring secruity 入门学习(XML方式配置用户登录), 源码下载

很久以前用过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}">
        <div class="errorblock">
            登录失败<br /> 原因 :
            ${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}
        </div>
    </c:if>

    <form name='f' action="${pageContext.request.contextPath}/j_spring_security_check"    method='POST'>

        <table>
            <tr>
                <td>用户:</td>
                <td><input type='text' name='j_username' value=''>
                </td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type='password' name='j_password' />
                </td>
            </tr>
            <tr>
                <td colspan='2'>
                <input name="submit" type="submit"
                    value="submit" />
                    <input name="reset" type="reset" />
                </td>
            </tr>
            
        </table>

    </form>
</body>
</html>


需要注意的是在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>
        <authentication-provider>
            <user-service>
                <user name="yihaomen" password="123456" authorities="ROLE_USER" />
            </user-service>
        </authentication-provider>
    </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;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class LoginController {

    @RequestMapping(value="/welcome", method = RequestMethod.GET)
    public String printWelcome(ModelMap model, Principal principal ) {

        String name = principal.getName();
        model.addAttribute("username", name);
        model.addAttribute("message", "Spring Security Custom Form example");
        return "hello";
    }

    @RequestMapping(value="/login", method = RequestMethod.GET)
    public String login(ModelMap model) {
        return "login";
    }
    
    @RequestMapping(value="/loginfailed", method = RequestMethod.GET)
    public String loginerror(ModelMap model) {
        model.addAttribute("error", "true");
        return "login";
    }
    
    @RequestMapping(value="/logout", method = RequestMethod.GET)
    public String logout(ModelMap model) {
        return "login";
    }
    
}


定义错误消息 mymessages.properties
程序代码 程序代码

AbstractUserDetailsAuthenticationProvider.badCredentials=\u9519\u8BEF\u7684\u7528\u6237\u540D\u6216\u5BC6\u7801

如果登录失败,将会在界面上显示这个消息: "错误的用户名或密码 "

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>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/mvc-dispatcher-servlet.xml,
            /WEB-INF/spring-security.xml
        </param-value>
    </context-param>

    <!-- Spring Security -->
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


整个程序结构如下:

运行程序,如果输入正确的用户名和密码:






如果输入的密码错误,则会出现如下错误提示



由此,一个简单的spring security 的登录认证就实现了,整个源代码下载,除去了jar包,自己添加:


下载文件 spring security xml configuration download


除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: spring security
相关日志:
评论: 5 | 引用: 0 | 查看次数: -
回复回复笔杆战神[2016-09-05 10:47 AM | del]
哥方便的话把jar包发给我把,2681844118@qq.com
回复回复xwolf[2016-03-05 05:03 PM | del]
很好,学习了!
回复回复稳5[2016-01-04 02:43 PM | del]
都没有jar包
回复回复jj[2015-08-18 05:30 PM | del]
少了一个asm的jar包
回复回复33[2014-03-04 05:44 PM | del]
建议楼主用MAVEN。。。
回复来自 轻舞肥羊 的评论 轻舞肥羊 于 2014-03-04 07:26 PM 回复
多谢,其实在项目中一直用maven的,个人试验,很少用,我用手机共享电脑上网,maven下载包很慢。也许以后发DEMO工程会用MAVEN工程发布。
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.