寻找一个简单的 Spring 安全示例 [关闭]

Posted

技术标签:

【中文标题】寻找一个简单的 Spring 安全示例 [关闭]【英文标题】:Looking for a Simple Spring security example [closed] 【发布时间】:2011-06-21 10:25:50 【问题描述】:

我是 spring-security (Java) 的新手,我正在寻找一个好的简单示例:

    如何使用spring security进行登录和注销

    确保每个页面上都存在会话,如果没有再次重定向到登录页面

    如何访问当前用户会话

我的项目目前正在使用 Spring MVC 和休眠。 我已经构建了 loginAPI + loginDAO,我现在需要结合安全性并使一些页面安全。

我搜索了教程,但是很多都很复杂。

【问题讨论】:

我在我的博客上维护代码示例:technotes.tostaky.biz/p/spring_27.html 【参考方案1】:

嗯。 这是我认为迄今为止我见过的最好的!http://krams915.blogspot.com/2010/12/spring-security-mvc-integration_18.html

【讨论】:

【参考方案2】:

您可以在 Spring Security 中查找单点登录(例如 CAS)实现。它将完全满足您的目的。

退房:-

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/cas.html

https://wiki.jasig.org/display/CASC/Using+the+CAS+Client+3.1+with+Spring+Security

【讨论】:

【参考方案3】:

这也是一个很好的例子:

http://www.mkyong.com/spring-security/spring-security-form-login-example/ http://krams915.blogspot.pt/2010/12/spring-security-3-mvc-using-simple-user.html

它们都有很好的文档记录,并且很容易根据您的建议进行修改。 Krams 谈到了使用 Spring Security 的 LDAP。

【讨论】:

【参考方案4】:

如果您还没有观看this video by the lead developer of Spring Security。它实际上在 Spring Security 站点上被引用,但很容易被忽略。虽然我同意,但很好 Spring Security 的例子很难找到。

【讨论】:

谢谢,听起来不错,但是质量太差了,我在后台看不到代码。请,如果有人可以发布一个例子,那就太好了。【参考方案5】:

Spring Security Tutorial by MKyong

how to perform database authentication (using both XML and Annotations) in Spring Security.

使用的技术:

春季 3.2.8.RELEASE Spring Security 3.2.3.RELEASE Spring JDBC 3.2.3.RELEASE Eclipse 4.2 JDK 1.6 Maven 3 Tomcat 6 或 7 (Servlet 3.x) mysql 服务器 5.6

SecurityConfig.java

package com.mkyong.config;

import javax.sql.DataSource;
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 SecurityConfig extends WebSecurityConfigurerAdapter 

    @Autowired
    DataSource dataSource;

    @Autowired
    public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception 

      auth.jdbcAuthentication().dataSource(dataSource)
        .usersByUsernameQuery(
            "select username,password, enabled from users where username=?")
        .authoritiesByUsernameQuery(
            "select username, role from user_roles where username=?");
       

    @Override
    protected void configure(HttpSecurity http) throws Exception 

      http.authorizeRequests()
        .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
        .and()
          .formLogin().loginPage("/login").failureUrl("/login?error")
          .usernameParameter("username").passwordParameter("password")
        .and()
          .logout().logoutSuccessUrl("/login?logout")
        .and()
          .exceptionHandling().accessDeniedPage("/403")
        .and()
          .csrf();
    

Spring-security.xml

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-3.2.xsd">

    <!-- enable use-expressions -->
    <http auto-config="true" use-expressions="true">

        <intercept-url pattern="/admin**" access="hasRole('ROLE_ADMIN')" />

        <!-- access denied page -->
        <access-denied-handler error-page="/403" />

        <form-login 
            login-page="/login" 
            default-target-url="/welcome" 
            authentication-failure-url="/login?error" 
            username-parameter="username"
            password-parameter="password" />
        <logout logout-success-url="/login?logout"  />
        <!-- enable csrf protection -->
        <csrf/>
    </http>

    <!-- Select users and user_roles from database -->
    <authentication-manager>
      <authentication-provider>
        <jdbc-user-service data-source-ref="dataSource"
          users-by-username-query=
            "select username,password, enabled from users where username=?"
          authorities-by-username-query=
            "select username, role from user_roles where username =?  " />
      </authentication-provider>
    </authentication-manager>

</beans:beans>
在上面的祝贺中,/admin 及其子文件夹均受密码保护。 login-page=”/login” – 显示自定义登录表单的页面 authentication-failure-url=”/login?error” – 如果认证失败,转发到页面/login?error logout-success-url=”/login?logout” - 如果注销成功,转发查看/logout username-parameter=”username” – 包含“用户名”的请求的名称。在 HTML 中,这是输入文本的名称。 &lt;csrf/&gt; – 启用跨站请求伪造 (CSRF) 保护

【讨论】:

以上是关于寻找一个简单的 Spring 安全示例 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

RestSharp 简单的完整示例 [关闭]

想要了解动态编程的人的一个简单示例[关闭]

Shiro 与 SpringSecurity [关闭]

Spring 安全 3 + JCIFS ntlm

我正在寻找 UITextFieldDelegate 示例代码 [关闭]

Spring 安全初始化失败