首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Security Form登录Tomcat中的SSL实现

问Spring Security Form登录Tomcat中的SSL实现
EN

Stack Overflow用户
提问于 2019-10-08 19:32:28
回答 1查看 101关注 0票数 0

我正在尝试通过https迁移一个使用Spring Security制作的Web应用程序。我遵循了网上找到的所有指南和文档,但它什么都不起作用。你能帮我解决这个问题或找出问题吗?

不工作,因为当我去https://mywebapps时,我得到一个页面找不到。当http工作时。

我按照本指南https://www.baeldung.com/spring-channel-security-https进行了密钥库和连接器的配置。

我在亚马逊网络服务EC2上运行webapp。

mywebapp/web-application-context.xml

代码语言:javascript
复制
<security:http auto-config="true">
        <security:intercept-url pattern="/Secure/**" access="isAuthenticated()" />
        <security:intercept-url pattern="/**" requires-channel="https" />
        <security:access-denied-handler
            error-page="/Unsecure/NoPermission" />
        <security:form-login login-page="/Unsecure/Login" 
            login-processing-url="/Unsecure/Login.do" username-parameter="username"
            password-parameter="password" always-use-default-target="true"
            default-target-url="/Secure/Home/Dashboard" authentication-failure-url="/Unsecure/Login?err=1" />
        <security:logout logout-success-url="/Unsecure/Login"
            logout-url="/Secure/Logout" delete-cookies="JSESSIONID" />
        <security:csrf />
        <security:http-basic/>
    </security:http>

tomcat7/server.xml

代码语言:javascript
复制
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" 
            maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" 
            sslProtocol="TLS" keystoreFile="${user.home}/.keystore" keystorePass="changeit"/>

mywebapp/web.xml

代码语言:javascript
复制
    <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/web-application-config.xml</param-value>
</context-param>
<session-config>
    <session-timeout>120</session-timeout>
</session-config>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>


<filter>
    <filter-name>encoding-filter</filter-name>
    <filter-class>
        org.springframework.web.filter.CharacterEncodingFilter
    </filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
    <param-name>forceEncoding</param-name>
    <param-value>true</param-value>
    </init-param>
</filter>

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

<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>

最好的规则,Carmine

EN

回答 1

Stack Overflow用户

发布于 2019-10-08 19:54:46

请确保修改了EC2实例的安全组,以允许到TCP端口8443的传入连接。

您还可以从实例shell本身使用wget来确定其服务页面是否通过HTTPS实现:

代码语言:javascript
复制
wget --no-check-certificate https://127.0.0.1:8443

嗯,重新读一下您的配置,您的Tomcat前面是否有一个反向代理,它将把端口443的请求路由到您的Tomcat侦听端口8443?如果没有,你应该使用HTTPS的https://mywebapp:8443而不是https://mywebapp来访问你的Tomcat。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58285531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档