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><img type='text' name='j_username' value=''>
                </td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><img type='password' name='j_password' />
                </td>
            </tr>
            <tr>
                <td colspan='2'>
                <img name="submit" type="submit"
                    value="submit" />
                    <img 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=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>
        <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包,自己添加:

源码下载地址:http://file.111cn.net/download/2013/12/a36.zip

时间: 2024-09-16 04:06:43

spring secruity XML方式配置用户登录学习笔记的相关文章

spring secruity 数据库方式配置用户登录

前几天学习了,直接在XML中配置用户密码,利用spring security 登录的例子.这种方式适合做演示,真实的项目在大多数情况下都会用数据库或者LDAP来做用户管理. 所以今天继续学习利用数据库方式配置用户登录, 在前面例子的基础上做,最主要的改变如下: 增加数据库相关的jar包 所有用到的jar包如下,有可能有多余的.  程序代码  代码如下 复制代码 antlr-2.7.7.jar aopalliance.jar commons-logging-1.1.jar jstl-1.1.2.j

SQLServer2005混合模式登录配置(用户登录错误18452,233,4064)_mssql2005

一.错误提示:用户登录失败,该用户与可信SQL Server连接无关联 错误18452 原因是远程登录没配置好,配置方法如下: 1:开启SQL2005远程连接功能 配置工具->SQLServer外围应用配置器->服务和连接的外围应用配置器->打开SQLEXPRESS下的DataBase Engine节点,选择远程连接,选择"同时使用TCP/IP和named pipes",确定后,重启数据库服务. 2:登录改为混合模式 打开管理器,用windows方式连接进入数据库,右

spring mvc-springmvc.xml如何配置多个视图解析器实现不同页面的跳转

问题描述 springmvc.xml如何配置多个视图解析器实现不同页面的跳转 解决方案 有一个多视图解析器,你可以看看 解决方案二: ``` 配置两个就好了,找不到第一个就会去找第二个

Dreamweaver构建Blog全程实录(7)-用户登录的实现

dreamweaver 第七章  Doking's BLOG用户登录页面的实现 已完成用户的注册,用户现在可以登录到网站中,发表笔记.笔记回复. 7.1  用户登录服务器行为 用户登录,经过验证正确,页面换了个用户登录后的面貌. (1)打开模板bkblog.dwt.aspx,在左边栏插入表格yhtab,并设计如图7-1黑色圈中所示. (2)插入关于YH表查询的数据集yhlog,以验证用户登录的正确. ①将数据集yhlog设为筛选,如图7-2所示. 图7-1  表格yhtab的设计图    开发全

关于spring security md5加密配置

问题描述 关于spring security md5加密配置 我在学习spring security的时候,遇到一个问题: <authentication-provider user-service-ref=""webUserDetailsService""> <!-- 密码的加密解密类 --> <!-- <password-encoder ref=""pwEncoder""/> --

Spring MVC 框架搭建配置方法及详解_JSP编程

现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理. 一.Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0) 1. jar包引入 Spring 2.5.6:spring.jar.spring-webmvc.jar.comm

Dreamweaver构建Blog(7):用户登录的实现2

dreamweaver 7.2  用户发表回复信息 用户登录后,就可以对 各学习笔记发表回复信息. (1)打开hf.aspx,插入表单yhplfrm,再插入表格Hftab,在表格中插入服务器文本框控件,ID为HFNAME:插入服务器文本区域控件,ID为HFTEXT:插入"发表"按钮,ID为plbottom,将其设为禁用,结果如图7-18所示. 图7-18  表格Hftab的有关设计 (3)绑定数据session("usename")到表格Hftab中的"姓

【MyBatis学习笔记】

[MyBatis学习笔记]系列之预备篇一:ant的下载与安装 [MyBatis学习笔记]系列之预备篇二:ant入门示例 [MyBatis学习笔记]系列之一:MyBatis入门示例 [MyBatis学习笔记]系列之二:MyBatis增删改示例 [MyBatis学习笔记]系列之三:MyBatis的association示例 [MyBatis学习笔记]系列之四:MyBatis association的两种形式 [MyBatis学习笔记]系列之五:MyBatis与Spring集成示例 [MyBatis学

Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用

 介绍 Memcached java client是官方推荐的最早的memcached java客户端.最新版本:java_memcached-release_2.6.1. 官方下载地址:https://github.com/gwhalin/Memcached-Java-Client 采用阻塞式SOCKET通讯,据说目前版本进行了很多优化,性能有所提高(只看过1.5的源代码,还没来及看最新的) 提供key方式的连接池,默认连接池key为default.(老版本了).2.6.1版本支持apac